----- Original Message ----- From: "Luke Palmer" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, January 06, 2004 4:51 AM Subject: [perl] Re: Roles and Mix-ins?
> David Storrs writes: > > > > On Sat, Dec 13, 2003 at 11:12:31AM -0800, Larry Wall wrote: > > > On Sat, Dec 13, 2003 at 04:57:17AM -0700, Luke Palmer wrote: > > > > > : For one, one role's methods don't silently override another's. Instead, > > > : you get, er, role conflict and you have to disambiguate yourself. > > > > How do you disambiguate? > > Let's see... > > role Dog { > method bark() { print "Ruff!" } > } > role Tree { > method bark() { print "Rough!" } > } > class Trog > does Dog does Tree { > method bark() { .Dog::bark() } > } > } > > Perhaps something like that. In any case, you do it by putting the > offending method directly in the aggregating class. > How about something like class Trog does Dog {bark=>dogBark} does Tree {bark=>treeBark} {...} Then we could have code like my Trog $foo = Trog.new(); my Dog $spot := $foo; my Tree $willow := $foo; $spot.bark(); # calls dogBark() $willow.bark(); #calls treeBark() This works better when Dog::bark and Tree::bark are both needed but they do different things. Joe Gottman