Hi:
I am trying to understand the different between and perhaps origin of
BlockClosure>>#valueWithPossibleArgs: and
BlockClosure>>#valueWithEnoughArguments:
I am trying to decide which of the two I need for SOMns.
The first one has seen more recent changes, when looking at the Pharo 6.1
download:
valueWithPossibleArgs: anArray —> 2/12/2017 StephaneDucasse
valueWithEnoughArguments: anArray —> 3/11/2001 nk
While they have rather different implementations, they seem to behave
identically, as far as I could tell using the following example:
blocks := {
[ { } ].
[:a | { a } ].
[:a :b | { a. b } ].
[:a :b :c | { a. b. c } ]
}.
blocks collect: [:b | b valueWithPossibleArgs: {1}].
blocks collect: [:b | b valueWithPossibleArgs: {1. 2. 3}].
blocks collect: [:b | b valueWithEnoughArguments: {1}].
blocks collect: [:b | b valueWithEnoughArguments: {1. 2. 3}].
I was also wondering how they relate to #cull:*
One of the major differences seems to be that valueWithP* and valueWithE* are
both injecting nil for absent arguments, while normal #value* and #cull*
methods signal an error.
Is there a specific use case why one wouldn’t want to be strict here as well,
but instead inject nils?
Any comments or pointer appreciated.
Thanks
Stefan
--
Stefan Marr
School of Computing, University of Kent
http://stefan-marr.de/research/