On Sunday 21 May 2006 13:29, Matt Diephouse wrote: > I think chromatic means that he thought :flat _was_ positional. That's > certainly what I thought.
Yes, exactly. I thought :flat and :slurpy were symmetric. > Look at the "Flattening argument lists" > section of S06: > > sub foo($x, $y, $z) {...} # expects three scalars > @onetothree = 1..3; # array stores three scalars > > foo(1,2,3); # okay: three args found > foo(@onetothree); # error: only one arg > foo([,[EMAIL PROTECTED]); # okay: @onetothree flattened to three > args > > In this example, $x, $y, and $z are positional args. I would expect C< > foo(1,2,3) > and C< foo([,[EMAIL PROTECTED]) > to be identical calls -- > even wrt multi dispatch. $x, $y, and $z are still positional even if > foo is called with a flattened array, right? Yes. The flattening should happen at the point of the call, not at the point of argument assignment within the call. > Autoboxing would make this a bit tougher in Parrot, but if ints box to > Integer and strings to String, then you can write your multis for > Integer and String (as chromatic did) and be done with it. I'm not sure why this matters for anything other than :slurpy; use a primitive-holding PMC array and mark it with :flat. (For Pheme it doesn't matter at all, as it doesn't use primitive types yet, if ever.) -- c