Hi,
Dave Whipp wrote:
> Austin Hastings wrote:
>> How about "perl should DWIM"? In this case, I'm with Juerd: splat
>> should pretend that my array is a series of args.
>>
>> So if I say:
>>
>> foo [EMAIL PROTECTED];
>>
>> or if I say:
>>
>> foo([EMAIL PROTECTED]);
>>
>> I still mean the same thing: shuck the array and get those args out
>> here, even the pairs.
>
> The trouble is, an array doesn't contain enough information:
>
> Compare:
> foo( (a=>1), b=>2 );
>
> With
> @args = ( (a=>1), b=>2 );
> foo( [EMAIL PROTECTED] );
my @args = ( (a => 1), b => 2 ); # is sugar for
my @args = ( (a => 1), (b => 2) );
# We can't stuff named arguments into an array, only pairs.
# Named arguments are neither objects nor some other data type,
# they're purely syntactical.
> If we have an arglist ctor, then we could have
>
> @args = arglist( (a=>1), b=>2 );
> foo( [EMAIL PROTECTED]);
>
> say @args.perl
> ## (
> ## (a=>1) but is_positional,
> ## (b=>2) but is_named,
> ## )
>
>
> but without such a constructor, it would be difficult to DWIM
> correctly.
Yep, see Luke's tuple proposal [1]:
my $tuple = ( (a => 1), b => 2 );
foo *$tuple; # same as
foo( (a => 1), b => 2 ); # one positional argument (a Pair) and
# the named parameter "b"
--Ingo
[1] http://svn.openfoundry.org/pugs/docs/notes/theory.pod
/Tuples