Larry Wall wrote:
> Larry Wall wrote:
> : Jonathan Lang wrote:
> : : Why not do it the same way that namespace scoping collisions are
> : : resolved: the local scope trumps the caller's scope.  Rinse, lather,
> : : repeat.  
> 
> Actually, I didn't see that you said "caller's scope".  That would imply
> some kind of dynamic scoping to multis, which I doubt we'll support
> except insofar as you can temporize a global name.

OK.  When I said the above, I was thinking of how Apocalypse 6 makes
mention of a C<CALLER::> prefix in order to provide access to the caller's
scope, and I was assuming that this was a generalized dynamic scoping
feature.  

Conceptually, I like the parallel between lexical scopes and class
namespaces; in many ways, C<CALLER::> seems to be to routines what
C<SUPER::> would be to classes.  

> The question I was trying to address was whether outer lexical multis
> should be hidden if there are any inner lexical mutlis of the same name,
> regardless of signature.  Hmm.  Now that I put it that way, it sounds
> as though the default should be to hide only the outer multis with
> the same signature, on the simple theory that a subroutine's complete
> name always includes its signature.  

More to the point, if two routines have the same signature, you aren't
going to be able to use argument types to distinguish between them.  

> You could always hide the outer ones with "is unique" (or however we do 
> it).  The fact that you might want to do this frequently is an argument 
> for a shorthand such as 
> 
>     my sub name!
> 
> If we do it that way, people will want to have a way to say that the
> inner lexical scope supplies all of the multis of that name.  Perhaps
> one can declare the name separately from the individual subs, as long
> as one didn't supply a signature:
> 
>     my sub name is unique {...};
>     my sub name (Foo $x) {...}
>     my sub name (Bar $x) {...}
>     my sub name ($x) is default {...}
> 
> or
> 
>     my sub name! {...};
>     my sub name (Foo $x) {...}
>     my sub name (Bar $x) {...}
>     my sub name? ($x) {...}
> 
> Hmm.

If I'm following you, the first line of each sample above would mean that
the dispatching done for C<name> would never look outside of the current
scope, right?  And a routine that has a signature but C<is unique> cannot
be seen from the lexical scopes of any called routines (for the purpose of
dispatching), right?  

So could C<name> be seen by a called routine?  I know that you're blinding
it from looking up to its caller; but could other routines look up to it?  

=====
Jonathan "Dataweaver" Lang

__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/

Reply via email to