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
何が問題なのですか。
偉大な、Akzan、あなたのコードが動作します! –