2011/12/2 Jesse Luehrs <[email protected]>
> On Fri, Dec 02, 2011 at 09:45:51AM +0800, woosley. xu. wrote:
> > but I think I got your point. So basically even if I run
> > meta->make_immutable on an constructed object, it is applied to the whole
> > __CLASS__, not just the object.
>
> Right.
>
> > What I want to do is to 'with' different Roles depending on the user
> > arguments passed to 'new' constructor, and then make the object
> immutable.
> > is that possible?
>
> Yes, this is possible. See MooseX::Traits, which does this sort of thing
> for you.
>
>
Thanks, MooseX::Traits looks like what I want. Only on problem, it can not
be used in 'BUILDARGS'
#!/usr/bin/perl -w
package A;
{
use Moose::Role;
}
package Class;
{
use Moose;
with 'MooseX::Traits';
around 'BUILDARGS' => sub {
my ($orig, $class, @args) = @_;
return $class->with_traits("A")->$orig();
}
}
package main;
my $c = Class->new();
print $c->does('A');
## get 0 here
> -doy
>
--
woosley.xu. http://twitter.com/redicaps