代码之家  ›  专栏  ›  技术社区  ›  xxxxxxx

如何创建一个新的moose类并在运行时实例化该类的对象?

  •  1
  • xxxxxxx  · 技术社区  · 14 年前

    使用创建元类后 Moose::Meta::Class->create ,如何用该类作为元类实例化真正的moose类? (我还需要创建元类,因为我还想对它应用一些角色。)

    2 回复  |  直到 12 年前
        1
  •  3
  •   jrockway    14 年前

    当然,元类就是类。如果需要该类的实例,只需执行以下操作:

    my $instance = $meta->name->new
    

    您可能还需要确保不会太快收集$meta。一般来说,您可以这样做:

    $meta->add_method( meta => sub { $meta } );
    

    这将保持元类的存在,但如果不小心的话,您将泄漏类。如果你只做一次,那就没关系了;如果你做了几千次,你可能会惹上麻烦。

    使用更高级的东西,比如 Moose::Meta::Class::create_anon_class MooseX::Traits .

        2
  •  3
  •   Community Egal    7 年前

    不确定这是否回答了你的另一个问题。 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? Building a Moose class at runtime and tuning it 但是看看:

    它可以做你想做的。或者,您可能会发现深入研究我们的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
    

    /伊3az/