----- 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



Reply via email to