Is any of this legal? class car { ... method make ($self: $make, [EMAIL PROTECTED]) returns(car) { return $self but role { has $.make = $make; method model($self: $model) returns(car) { unless $model eq any(@models) { die "Invalid model: $model"; } return $self but role { has $.model = $model; } } } } } my car $generic .= new; my car $ford = $generic.make("ford",<pinto mustang>); my car $pinto = $ford.model("pinto");
It certainly seems very attractive, but I'm not sure if roles can be anonymous and/or closures. If we can do this, then it brings up the possibility of currying mixin-generator methods and all sorts of other useful features which would greatly simplify some very complex classes. 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; } This allows a role to "reset" the application of subordinate roles (as the example method, make, might want to reset the application of its own "model" method's anon role). "has not" precludes ever having a type named "not", and if that's a problem it could read "not has" or "!has", but that feels a bit klunkier to me. -- Aaron Sherman <[EMAIL PROTECTED]> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback