On Tue, 2005-04-26 at 09:58, Abhijit Mahabal wrote: > On Tue, 26 Apr 2005, Aaron Sherman wrote: > > > It also might be useful for roles to be able to delete members and > > methods from a class like so: > > > > role foo { > > has $.x; > > has not $.y; > > } > > But that brings up the issue of who has the final authority. In class > composition, a method defined in the class hides those in the roles, and > in this sense it is the boss on "adding decisions".
Quoting S12: A class's method definition hides any role definition of the same name, so role methods are second-class citizens. On the other hand, role methods are still part of the class itself, so they hide any methods inherited from other classes, which makes ordinary inherited methods third-class citizens, as it were. So in the case of class construction: class x is y does z {...} you should get x's methods plus any new ones from z plus any new ones from y. In the case of a mixin, I THINK the actual type of the new value is an anonymous class, so it's something like this: my $x = $y but z; is my (class {is ::{$y};does z;} $x = $y.clone; or whatever the copy syntax is (and I might be wrong about how to specify the type of $y... is there a typeof()?) So, as you can see, in the case of mixins, the hypothetical: role z { has not mymeth; } would, in fact, remove mymeth from $x, and in class composition, it would remove the method from parents, but not from the class being declared (as it should not, by my way of thinking). -- Aaron Sherman <[EMAIL PROTECTED]> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback