Re: Function not called in base class

[email protected] (Matt S Trout)
Newsgroups perl.moose
Message-ID <[email protected]>
On 29/03/11 09:09, Peter Gordon wrote:
> In this example, I have defined two classes - MyValue, and MyValueBool.
> MyValueBool is meant to do the same thing as MyValue, except that the
> value is restricted to a boolean.
>
> The problem is that the 'around' function only gets called when using
> the base class.
>
>
> This succeeds - around 'value' is called.
>
> $f = MyValue->new ;
> $n = $f->value ;
>
>
> This fails - around 'value' is not called.
>
> $f = MyValueBool->new ;
> $n = $f->value ;
>
> Without repeating the 'around' routine, what should I do?
>
> Thanks,
>
> Peter
>
>
>
>
>
> package MyValue ;
> use Mouse ;
has 'value' =>  ( accessor => '_value' ) ;

sub value {
   print "WHEE\n";
   shift->_value(@_);
}

> __PACKAGE__->meta->strict_constructor(1);
> __PACKAGE__->meta->make_immutable;
> no Mouse ;
>
> package MyValueBool ;
> use Mouse ;
> extends 'MyValue' ;
> has '+value' =>  (
> 		 isa     =>  'Bool',
> 		);
>
> __PACKAGE__->meta->strict_constructor(1);
> __PACKAGE__->meta->make_immutable;
> no Mouse ;
> 1;

would work. Not sure if that's precisely what you want, though.

Perhaps your best option would be to look at adding introspection to 
Class::MOP::Method::Wrapped so that modifiers can be re-applied further 
down? I've given consideration to doing this a couple of times now and I 
don't think it's actually -hard- as such, just fiddly enough I've not 
felt like trying.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.