Austin Hastings wrote: > Jonathan Lang wrote: > > role A {has Cat $.x;} > > role B {has Dog $.x;} > > class Foo {does Cat; does Dog;} > > my Foo $bar; > > $bar.x; # Is this a Cat or a Dog? > > <A12> > If, however, two roles try to introduce a method of the same name (for > some definition of name), then the composition of the class fails, and > the compilation of the program blows sky high--we sincerely hope. It's > much better to catch this kind of error at compile time if you can. And > in this case, you can. > </A12> > > Since classes are autogenerating accessors based in data members, it's > doubly reasonable to assume that the same solution will apply: conflict > -> death.
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. Then again, this may be more of a quirk than a problem... ===== Jonathan "Dataweaver" Lang __________________________________ Do you Yahoo!? Yahoo! Photos: High-quality 4x6 digital prints for 25¢ http://photos.yahoo.com/ph/print_splash