On Fri, Dec 12, 2003 at 10:30:06PM +0100, Eirik Berg Hanssen wrote:
: Larry Wall <[EMAIL PROTECTED]> writes:
: 
: > On Fri, Dec 12, 2003 at 04:05:25PM +0100, Eirik Berg Hanssen wrote:
: 
: > :   I for one would appreciate the visual clue that we access properties
: > : and subclasses as roles ($foo~~bareword), while we access attributes
: > : (with accessors) as methods ($foo.bareword).  Different things should
: > : look different, right?
: > 
: > I still think that you can access the role itself as a method, but only
: > if it's really there.  In that case the different thing is trying to be
: > the same.  A simple property should behave like an attribute when it can.
: 
:   When I wrote that, I still had in mind the "boolean methods
: corresponding to every class/role/property name in scope" -- but I
: think you mean something else when you speak of accessing the role.
: Specifically, I think you mean what I would call "accessing the role's
: (main) attribute".  If so, we are still in agreement.  If not, I am
: very much confused. :-)
: 
:   Red and Reddish (per your example) are not properties, given your
: definition in the other thread.  So you are not arguing for Red and
: Reddish to be accessible as methods, I gather.

Not any more.

:   I can see this, I suppose:
: 
:         $bar but= $foo.Color if $foo ~~ Color;
:         if $bar ~~ Reddish {
:             print $bar.hex_code; # hex_code is a method of the role,
:                                  # and so can be accessed directly.
: 
:             $bar.Color.red = 0;  # red is not a method of the role,
:                                  # and must be accessed through the
:                                  # role's main attribute (for which
:                                  # red is an lvalue method, it seems).
:         }
: 
:   But this would all come about because the role defines an attribute
: by the same name, not because method lookup scans the role namespace.
: Or so I would hope.

Yes.

:   And then it is no different from being able to access as a method
: any public attribute (or other method) that the role defines -- if the
: role is really there.
: 
:   Or am I very much confused?

No, I don't think you're confused.  Of course, I could be confused
about that...

Larry

Reply via email to