On Aug 18, 2011, at 8:52 44AM, Philippe Marschall wrote: > On 17.08.2011 22:57, Henrik Sperre Johansen wrote: >> On 17.08.2011 22:29, Philippe Marschall wrote: >>> On 17.08.2011 22:17, Stéphane Ducasse wrote: >>>> I wrote >>>> >>>> >>>> cull: anArg >>>> "Execute the receiver with one or zero argument. >>>> >>>> [ 1 + 2 ] cull: 5 >>>> returns 3 >>>> [ :x | 1+ 2 + x] cull: 5 >>>> returns 8 >>>> " >>>> ^numArgs = 0 >>>> ifTrue: [self value] >>>> ifFalse: [self value: anArg] >>>> >>> >>> So it's like #valueWithPossibleArgument:? >> Almost. >> cull: raises error if given blocks with too many args, >> valueWithPossibleArgument(s): evaluates with the extra args as nil. >>> Why do we need two methods >>> that do the same thing? >> Because valueWithPossibleArguments was there first, and we can't simply >> remove it. >> cull is more natural to use in 99.9% of the cases. >> >> Also, #cull: protocol only goes up to 4 arguments, mirroring #value: >> (#cullWithArguments: not being present is mostly an oversight though... ) > > So we #valueWithPossibleArgument:? > > Cheers > Philippe #valueWithPossibleArgument: / #valueWithPossibleArgs: / #valueWithEnoughArguments: all execute the block with nil args if passed too few. #cull:'s raise an error. Other than that, they are equivalent from a users POV, yes.
Cheers, Henry
