What about making explicit in the comment that the arg is ignored if not
needed?

Something like

cull: anArg
    "Execute the receiver with one or zero argument.  If the receiver needs
less than one argument, the argument is ignored.
      ..."

Guille

On Thu, Aug 18, 2011 at 4:17 AM, Henrik Johansen <
[email protected]> wrote:

>
> 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
>

Reply via email to