On Fri, Feb 16, 2018 at 2:25 PM, Stefan Marr <smalltalk@stefan-marr.de> wrote:
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?


I guess it's because we offer both flavors. If you see valueWithArguments: you will see it does throw errors like #value*�� / #cull* do.��
��


Any comments or pointer appreciated.

Thanks
Stefan


--
Stefan Marr
School of Computing, University of Kent
http://stefan-marr.de/research/






--