# from Ovid
# on Sunday 08 March 2009 09:48:

>I want to write a module which allows me to quickly detect if a method
> is overriding a parent class method 
>...
>    sub foo :override{...} # fails if it doesn't override
>    sub bar {...}             # fails if it does override
>...
>    use Method::Override;
>    Method::Override::overriden(qw/foo/);
>
>That can solve nasty problems where the developer accidentally
> overrides a parent method but doesn't realize it.

For clarity and not having to type a method name twice, I think the 
attribute implementation would be the way to go.  Alternatively, you 
might go with something like:

  override(foo => sub {...});

Where you then install the sub foo into caller.  The advantage would be 
that you have the ability to e.g. wrap it with a sub to enforce the 
constraint at runtime (iff you're willing to pay that cost) and 
possibly some options.  You've probably noticed the drawback where you 
need to run INIT{} or something to perform the not-overridden check.  
Or:

  define(bar => sub {...});

Yeah, that forces syntax to be rather widespread.

I always seem to want to be able to install something like a UNITCHECK 
block into caller from import().  Alas.

And anyway, the attributes implementation can probably be made to do 
wrapping for run-time checking and various other features.

How does Perl 6 (or some other language) do (or allow for) this?

--Eric
-- 
software:  a hypothetical exercise which happens to compile.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to