我想实现简单的方法链接,因为该方法必须返回对象。由于我的代码已经使用Moose并且我的未来类几乎为空并且只返回一个属性与另一个类的实例,我决定使用Moose::Meta::Class(即Class::MOP::Class的子类)以编程方式生成它们。第一次使用Moose元类,所以我写了一个简单的代码来尝试:
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!
,我看到了
找不到对象方法" new"通过包" Tiger"在dynamic.pl 第33行
有什么问题?
答案 0 :(得分:0)