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/
-- Mariano http://marianopeck.wordpress.com