我在参数化角色中定义了一个方法,该方法需要在运行时创建一个新类
使用Moose::Meta::Class->create
并将精确的参数化角色应用于它。我也在使用
$new_class->meta->add_method( some_name => sub {
my ($self) = @_;
...
})
在子{...}内部我想访问消费者类的方法并将其用于某些事情,我尝试使用$self->get_method
,它没有用,我该怎么做?< / p>
请注意,上面子内的$self
为MooseX::Role::Parameterized::Meta::Role::Parameterizable
如果我这样做,我还有另一个问题:
my $object = Moose::Meta::Class->create(
"some_type",
);
为什么不是类型为some_type的$object
而且它是一些丑陋的MooseX::Role::Parameterized::Meta::Role::Parameterizable
,我如何找到some_type类型的对象?
答案 0 :(得分:1)
要回答你的第二个问题,原因是因为Perl的OO不允许你只为一个类的一个实例添加一个方法,所以Moose必须通过使用额外的方法创建子类并重新使用唯一的方法来伪造它。对象进入该子类。
请注意,如果您正确地执行操作并使用isa
,has
和/或does
进行内省,而不是尝试依赖对象的名称而受到祝福包,这没关系。该对象仍然是isa
some_type,has
所有some_type的属性,以及does
所有some_type的角色,即使它现在被祝福到一个包含丑陋的自动生成名称的包中。
答案 1 :(得分:0)
听起来你的潜在问题几乎就是我在this question所描述的:在角色定义中,你需要获得对象或类的类(及其元类)角色是适用于。这在普通角色中是不可能的,但可以通过参数化角色来实现。
答案 2 :(得分:0)
我不太确定你在这里要做什么。我们假设你有
my $new_class = Moose::Meta::Class->create('FooBar');
然后$new_class
FooBar
的元对象。因此,如果您想要将方法添加到FooBar
,您会说
$new_class->add_method(foo => sub { … });
基本上与
相同FooBar->meta->add_method(foo => sub { … });
您还应该使用Moose::Util中的find_meta()
。这将返回正确的元对象(如果有的话),即使您的类没有meta
方法,也不会将其用于其他方法。
如上所述,我不确定这会回答你的问题。