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