使用创建元类后Moose::Meta::Class->create
,如何将该类作为元类实例化一个真正的 Moose 类?(我还需要创建元类,因为我还想为其应用一些角色。)
问问题
1036 次
2 回答
3
不确定这是否回答了在运行时构建 Moose 类并调整它的这个或您的其他 SO 问题How do I build a Moose class at runtime, add a method to it, apply a role to it and instantiate it once? How would you approach this?
,但请查看:
它可能会做你想做的事。或者您可能会发现查看我们的 it 工作很有用。
该文档确实提供了指向我在构建此模块时制作的博客文章的链接,因此您可能会发现这些文章也很有帮助。
这是 MooseX::SingletonMethod 的简短代码示例:
{
package Foo;
use MooseX::SingletonMethod;
sub bar { say 'bar' }
}
my $baz = Foo->new;
my $bar = Foo->new;
$baz->add_singleton_method( baz => sub { say 'baz' } );
$baz->bar; # => bar
$bar->bar; # => bar
$baz->baz; # => baz
$bar->baz; # Throws can't find baz error
/I3az/
于 2010-03-10T12:39:32.600 回答
3
当然,元类就是类。如果您想要该类的实例,只需执行以下操作:
my $instance = $meta->name->new
您可能还需要确保不会过早收集 $meta。通常,您会这样做:
$meta->add_method( meta => sub { $meta } );
这将保留元类,但如果您不小心,您将泄漏该类。如果你只做一次,那没关系;如果你这样做数千次,你可能会让自己陷入困境。
最好使用更高级别的东西,比如Moose::Meta::Class::create_anon_class
or MooseX::Traits
。
于 2010-03-10T14:44:12.477 回答