我想实现简单的方法链接,因为方法必须返回对象。由于我的代码已经在使用Moose了,而且以后的类几乎是空的,并且只返回一个属性和另一个类的实例,所以我决定用驼鹿::元::类 (即类别::MOP::的子类)编程地生成它们。第一次使用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!,我看到
无法通过包"Tiger“在dynamic.pl第33行找到对象方法”新“
怎么了?
发布于 2017-04-19 07:51:22
https://stackoverflow.com/questions/43482508
复制相似问题