Re: Alternately named arguments

2003-10-25 Thread David Storrs
On Fri, Oct 24, 2003 at 12:57:18AM -0600, Luke Palmer wrote:
> Presuming you can do:
> 
> (who => $name, why => $reason) := (why => $because, who => "me");
> 
> (from A6)
> 
> Does that imply that you can do:
> 
> sub routine (name => $nombre, date => $fecha) {...}
> 
> Anyway, I just realized that this is finally an elegant way to do
> multiple, unordered return values:
> 
> (name => $name, id => $id) := getinfo();
> 
> (Or, in this precise case:)
> 
> (+$name, +$id) := getinfo();


Just confirming something...if you did this:

 ($name, $id) := &getinfo();

I think you would end up storing an alias to the getinfo() sub in $name, and
undef in $id.  Is that correct?

What would happen if you did this?

 (+$name, +$id) := &getinfo();

I would expect a compile time error, because you can't bind a sub
alias to a scalar that is being forced into numeric context.

--Dks


Re: Alternately named arguments

2003-10-25 Thread Luke Palmer
David Storrs writes:
> On Fri, Oct 24, 2003 at 12:57:18AM -0600, Luke Palmer wrote:
> > Presuming you can do:
> > 
> > (who => $name, why => $reason) := (why => $because, who => "me");
> > 
> > (from A6)
> > 
> > Does that imply that you can do:
> > 
> > sub routine (name => $nombre, date => $fecha) {...}
> > 
> > Anyway, I just realized that this is finally an elegant way to do
> > multiple, unordered return values:
> > 
> > (name => $name, id => $id) := getinfo();
> > 
> > (Or, in this precise case:)
> > 
> > (+$name, +$id) := getinfo();
> 
> 
> Just confirming something...if you did this:
> 
>  ($name, $id) := &getinfo();
> 
> I think you would end up storing an alias to the getinfo() sub in $name, and
> undef in $id.  Is that correct?

Yeah, providing getinfo has an empty sig.

Well, if we take the binding/parameter passing equivalency a little
farther, that can be an error.  Which may turn out to be good:

($name, $id) := getinfo();# I want getinfo to return 2 values

($name, ?$id) := getinfo();   # I realize that it may only return 1

Etc.

> What would happen if you did this?
> 
>  (+$name, +$id) := &getinfo();
> 
> I would expect a compile time error, because you can't bind a sub
> alias to a scalar that is being forced into numeric context.

Nu...meric context?  I meant that as named parameters, that is,
expecting getinfo to return a list of pairs.  So I think that will be an
error, just for a different reason.

Luke