hi, would something like that OK?
package Test;
use Moose;
has 'ver' => ( required => 1 );
has '_obj' => (
lazy => 1,
default => sub {
my $self = shift;
if ( $self->ver == 1 ) {
return Test::V1->new(@_);
} else {
return Test::V2->new(@_);
},
},
handles => sub {
my ( $self, $meta ) = @_;
if ( $self->ver == 1 ) {
return map { $_ => $_ ) ('sub1', 'sub2'); # subs/attrs in Test::V1
} else {
return map { $_ => $_ ) ('sub3', 'sub4'); # subs/attrs in Test::V2
}
}
);
Thanks.
On Sat, Apr 18, 2009 at 9:42 PM, Fayland Lam <[email protected]> wrote:
> one more thing, when I call
>
> Test->new( ver => 2, otherval => 3 );
> the delegation would pass otherval => 3 to Test::V2 too.
>
> Thanks for any tip.
>
> On Sat, Apr 18, 2009 at 7:51 PM, Fayland Lam <[email protected]> wrote:
>> see I have Test::V1 and Test::V2.
>>
>> package Test::V1;
>> use Moose;
>> has 'var' => ( default => 1 );
>> package Test::V2;
>> use Moose;
>> has 'var' => (default => 2 );
>>
>> then I have a Test
>> package Test;
>> use Moose;
>> has 'ver' => ( required => 1 );
>>
>> I want something like follows:
>> my $t1 = Test->new( ver => 1);
>> print $t1->var; # 1;
>> my $t2 = Test->new( ver => 2 );
>> print $t2->var; # 2
>>
>> in V1 and V2, there would be something more than 'var' and have different
>> subs.
>> how to delegate depends on the 'ver' in Test? any hint?
>>
>> Thanks.
>>
>> --
>> Fayland Lam // http://www.fayland.org/
>> Foorum based on Catalyst // http://www.foorumbbs.com/
>>
>
>
>
> --
> Fayland Lam // http://www.fayland.org/
> Foorum based on Catalyst // http://www.foorumbbs.com/
>
--
Fayland Lam // http://www.fayland.org/
Foorum based on Catalyst // http://www.foorumbbs.com/