Larry Wall wrote:
> On Fri, Apr 23, 2004 at 02:37:58PM -0700, Jonathan Lang wrote:
> : Note that the problem extends past accessors: a role's methods can
> : access its attributes directly. So:
> :
> : role A {has Cat $.x; method m1 {return $.x;};}
> : role B {has Dog $.x; method m2 {return $.x;};}
> : class Foo {does Cat; does Dog;}
> : my Foo $bar;
> : $bar.m1; # returns $A::x, right?
> : $bar.m2; # returns $B::x, right?
> :
> : If the two $.x's are completely equivelent, you end up with redundant
> : data storage.
>
> Actually, it'd blow up at composition time anyway, since there's a
> default readonly accessor for each $.x variable.
OK; so add "method x {...};" to class Foo to keep it from blowing up. Foo
still has to track two scalars internally.
Actually, it's worse than that: let's add "has Elephant $.x;" to Foo
instead. Since class trumps role, does $bar.m1 now work with an Elephant,
or does it still work with a Cat?
=====
Jonathan "Dataweaver" Lang
__________________________________
Do you Yahoo!?
Yahoo! Photos: High-quality 4x6 digital prints for 25�
http://photos.yahoo.com/ph/print_splash