Sex, 2008-09-19 às 10:25 -0700, Jon Lang escreveu: > Daniel Ruoso wrote: > > In SMOP, it is handled based on the package of the Class, the private > > storage inside the object is something like > > $obj.^!private_storage<A::><$!bar> > > and > > $ojb.^!private_storage<B::><$!bar> > Note that this ought only be true of class inheritance; with role > composition, there should only be one $!bar in the class, no matter > how many roles define it.
er... what does that mean exactly? role B { has $!a; } role C { has $!a; } class A does B, C { method foo() { say $!a; } } I think in this case $!B::a and $!C::a won't ever be visible, while the reference to $!a in class A will be a compile time error. OTOH... role B { has $.a; } role C { has $.a; } class A does B, C { method foo() { say $.a; } method bar() { say $!a; } } In that case, both B and C declare a *method* "a" which happens to be visible in class A (and probably a composition error), but $!a in method bar is still a compile time error, because there's no $!a declared in class A. Or does that mean that class A does B, C {...} actually makes the declarations in B and C as if it were declared in the class A? daniel