2017-04-18 8 views
3

単純なメソッド連鎖を実装したいと思います。私のコードは既にMooseを使用しているので、私の将来のクラスはほとんど空であり、別のクラスのインスタンスを持つ1つの属性だけを返すので、Moose::Meta::Class(つまりサブクラスはClass::MOP::Class)とプログラムで生成することにしました。出力のMoose :: Meta :: ClassまたはClass :: MOP :: Classを使用した正しい動的クラス生成

package Cat; 
use Moose; 


package Generator; 
use Moose; 

sub generate { 

    Class::MOP::Class->create(
     'Siberian' => (
      methods => { 
       echo => sub { print 'yeah!' } 
      } 
     ) 
    ); 

    Class::MOP::Class->create(
     'Tiger' => (
      attributes => [ 
       Class::MOP::Attribute->new('Siberian' => (
       default => sub { require Siberian; Siberian->new; } 
       )), 
      ], 
     ) 
    ); 

    Cat->meta->add_attribute(Class::MOP::Attribute->new(
     Tiger => (
      default => sub { require Tiger; Tiger->new } 
     ) 
    )); 

    print "Generation done!\n"; 

} 

generate(); 


package main; 
use Generator; 

my $a = Cat->new; 
warn $a->Tiger->Siberian->echo; # must print 'yeah!' but prints Can't locate object method "new" via package "Tiger" at dynamic.pl line 33 

代わりの予想yeah!を私は

オブジェクトのメソッドを見つけることができません「新しい」パッケージを経由して「タイガー」を参照してください。ムースと協力初めて私がしようとする単純なコードを書いたメタクラスat dynamic.pl line 33

何が問題なのですか。

答えて

関連する問題