Front page | perl.perl6.language |
Postings from January 2004
Re: Roles and Mix-ins?
Thread Previous
|
Thread Next
From:
Piers Cawley
Date:
January 7, 2004 00:23
Subject:
Re: Roles and Mix-ins?
Message ID:
m265fo6uav.fsf@obelisk.bofh.org.uk
"Joe Gottman" <jgottman@carolina.rr.com> writes:
> ----- Original Message -----
> From: "Luke Palmer" <fibonaci@babylonia.flatirons.org>
> To: <perl6-language@perl.org>
> 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.
I'm really not happy with the idea that simply using a typed variable
should change the way a method call on that variable is
dispatched. You seem to be saying that
class Parent { override { "Parent" }}
class Child is Parent { override { "Child" }}
my $kid = Child.new;
my Parent $dad := $kid;
print $kid.override; # "Child"
print $dad.override; # "Parent"
And down that road lies C++ and other insanity.
--
Beware the Perl 6 early morning joggers -- Allison Randal
Thread Previous
|
Thread Next