首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Moose::Meta::Class或Class::MOP::Class生成右动态类

使用Moose::Meta::Class或Class::MOP::Class生成右动态类
EN

Stack Overflow用户
提问于 2017-04-18 21:28:16
回答 1查看 280关注 0票数 3

我想实现简单的方法链接,因为方法必须返回对象。由于我的代码已经在使用Moose了,而且以后的类几乎是空的,并且只返回一个属性和另一个类的实例,所以我决定用驼鹿::元::类 (即类别::MOP::的子类)编程地生成它们。第一次使用Moose元类,所以我编写了一个简单的代码来尝试:

代码语言:javascript
复制
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行找到对象方法”新“

怎么了?

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 07:51:22

谁将响应构造函数的创建?

另一种方法是直接使用元类变量。

https://gist.github.com/akzhan/421579163dfc86f570809f50d239800f

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43482508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档