On Sun, Mar 08, 2009 at 09:31:19PM -0700, Larry Wall wrote:
> On Sun, Mar 08, 2009 at 09:36:17PM +0100, Moritz Lenz wrote:
> : But both pugs and rakudo respect the arity of the code ref passed to it,
> : so that (1..6).map({$^a + $^b + $^c}) returns the list (6, 15), which is
> : very nice and very DWIM'my.
> : 
> : But it opens the question what should happen if there is a number of
> : items in the list that's not easily divisible by the arity - should the
> : rest just be padded with undef's? or just ignored? Or fail() with a
> : friendly error message?
> 
> I think the basic rule has to be simply can the signature bind to
> the remaining arguments.  If not, we get a warning on unused arguments.
> We can mark arguments as optional if that's what we mean.  
> [...]
> My gut feeling is that
> placeholder variables probably should not be considered optional; in
> most cases a non-divisible number of arguments indicates a logic error
> in the program, and an earlier message is better, even at the expense
> of thowing away some (possibly valid) partial data.  Especially since
> we do have a way to indicate that partial data is acceptable:
> 
>     -> $a, $b?, $c? { $a + ($b//0) + ($c//0) }

Presumably whatever we decide for C<map()> also applies to C<for>, yes?

    for 1..4 -> $a, $b, $c { ... }      # error
    for 1..4 -> $a, $b, $c? { ... }     # error
    for 1..4 -> $a, $b?, $c? { ... }    # ok

Pm

Reply via email to