Luke Palmer wrote:

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 -> [EMAIL PROTECTED] { 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 [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED] -> @x { say @x };

certainly

   for [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED] -> $x { say $x };

should work. Are there any non-slashy versions of this?

-- Rod Adams



Reply via email to