On Fri, 2004-04-23 at 17:24, Larry Wall wrote:
> [...]
> 
> On the sixth hand, by that argument, since .dispatcher is aiming at
> a Class, it should be an uppercase C<>.   :-)

why not wash all these hands altogether?

IDEA 1

implementing a "final" trait should be trivial enough (it just throws an
exception when, at class construction time, it sees a method that is eq
a base method marked final). so this could be something like (pretending
Object will be written in P6 rather than "gloriously grungy C code" :-):

    class Object {
        has MetaClass $.meta is final;
    }

this would also allow the following code to not compile:

    class HumanBeing {
        method die is final {
            $_.rest_in_peace();
        }
    }

    class Zombie is HumanBeing {
        method die {
            return undef;
        }
    }

so long for B-series splatter movies, but hey :-)

IDEA 2

since the .meta method should be the first thing in the inheritance tree
(unless you negate somehow your inheritance from Object, but in this
case you are supposed to know what you're doing), even if you overload
it, the "correct" .meta should always be available as:

    ($obj.+meta)[-1]

and once we have $obj.+meth, $obj.*meth and $obh.?meth modeled after
regexp modifiers, I see no reason why we shouldn't have:

    $obj.^meta

which, calling the most derived method, should always do the Right
Thing.

cheers,
Aldo 


Reply via email to