Almost. The last one should be:
for 1..10, &foo;
> What happens with:
>
> for 1..10 -> *@a { say @a };
Good question. That's a function of how C<for> interprets the arity. The
formal arity of a sub with *@ is Inf, so I suppose say would get 1..10
and the loop would run once.
That's probably the best way for C<for> to behave, because that's what
I'd expect in this case.
Luke
for 1..10 -> $a, $b { say $a, $b };
for 1..10 { say $^a, $^b };
sub foo ($a, $b) { say $a, $b };
for 1..10 &foo;
What happens with:
for 1..10 -> *@a { say @a };
-- Rod Adams
>Rod Adams writes:
>
>
>>Are the following all legal and equivalent?
>>
>> for 1..10 -> $a, $b { say $a, $b };
>>
>> for 1..10 { say $^a, $^b };
>>
>> sub foo ($a, $b) { say $a, $b };
>> for 1..10 &foo;
>>
>>
>
>Almost. The last one should be:
>
> for 1..10, &foo;
>
>
Doh! I knew that.
>
>
>
>>What happens with:
>>
>> for 1..10 -> *@a { say @a };
>>
>>
>
>Good question. That's a function of how C<for> interprets the arity. The
>formal arity of a sub with *@ is Inf, so I suppose say would get 1..10
>and the loop would run once.
>
>That's probably the best way for C<for> to behave, because that's what
>I'd expect in this case.
>
>
That's what I'd expect as well. It's not terribly useful, but worth
clarifying.
A folowup question is how to get:
for @a, @b, @c -> @x { say @x };
to work properly. "Properly" being defined here as three iterations.
The best guess I can put forward is:
for \@a, \@b, \@c -> @x { say @x };
certainly
for \@a, \@b, \@c -> $x { say $x };
should work. Are there any non-slashy versions of this?
-- Rod Adams
> for \@a, \@b, \@c -> $x { say $x };
>
> should work. Are there any non-slashy versions of this?
I'd guess
for @a; @b; @c -> $x { say $x;}
or
for (@a; @b; @c) -> $x { say $x;}
(are parens mandatory here?)
Miro