> > And I'm coming in late on this. Are you saying you want
> > Exporter/%EXPORT_TAGS functionality built into the language and
> > into all objects? Wouldn't that jack up the overhead?
> 
> No.  All I'm saying is that this sort of construct:
> 
>    *{$_} = \&{"Class::$_"} foreach (qw(method method2 method3));
> 
> Gives you everything that inheriting a class does, apart from the
> ->isa() relationship.  And potential unwanted namespace pollution.

Isn't that potential namespace pollution anyway?
You should obviously pay attention to what you're importing....

Even now, you can explicitly 
   use Class ();
to import nothing, right?

> I'm thinking along the lines of;
> 
>   use base MyActualObjectSuperClass;
>   use base XML::Sablotron::DOM => [ "Core" ];
> 
> So your class ->isa("MyActualObjectSuperClass"), but ->can() all of
> the Core DOM methods, which could perhaps be tested for as 
> ->mimics("XML::Sablotron::DOM", "Core"), but also as 
> ->isa("XML::Sablotron::DOM") for compatibility.

Ok, forgive me. I see what you're saying, but I'm lost as to why.
As I said before, I'm feeling really dense today.

> > We musn't dictate style.
> 
> No, but we should emanate good style.  And I consider opening two
> class' namespaces into the same stash to be very bad style.

True enough.
("emanate"? maybe "promote".)

> Whenever I've seen Multiple Inheritance used, it has been because the
> two classes inherited are not similar; and you're just doing it to
> save yourself the hassle of splitting it into a ``servant class''
(ie, 
> referring to another object & forwarding methods to it).  To
> re-iterate my point, an interface is a `more correct' representation
> of this relationship.  So let's make the semantics of it easy so that
> people can avoid it more easily...

I don't know if I can 100% agree with your assumptions, but I do agree
with your suggestion. :)  As I said before, I prefer delegation anyway.

> Brent says that `attribute slots in a Parrot object are private to
> the object', so if you really do inherit from two classes, it should
> be the case that one class cannot access the other class' attributes.

Makes sense.

> But - if  the child class accesses an attribute which is defined in
> both classes, which does it get?  I think that case (MI two classes
> with clashing symbols) should be a hard run-time error. 

Ah. P5 does a [EMAIL PROTECTED] search, right?
But that might not be what you want, particularly if you say
 @ISA = qw / X Y /;
and you want X's foo() method but Y's bar(). If both have a foo() *and*
a bar(), you couldn't disambiguate with the order of @ISA anymore. It's
probably a rare case, but it will happen. You're right -- no clean
solution comes easily to mind. All that pops up atthe moment is
hardcoding hackery, in fact, but as I said, I'm dense today, lol....

> If attributes are declared explicitly, then this enables this test. 
> In Perl 5, the approach taken with MI namespace clashes is to cross
> one's fingers ;).

lol, yeah I guess so.
So how would you write code in your proposed solution to solve the
above example case?

__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/

Reply via email to