首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Class::MOP::Class创建动态数据模型不起作用

使用Class::MOP::Class创建动态数据模型不起作用
EN

Stack Overflow用户
提问于 2012-06-27 09:47:10
回答 1查看 154关注 0票数 1

我在JSON文件中有Schema定义,我希望读取这些定义并使用Class::MOP::Class动态生成类。例如,有JSON文件A.json、B.json、C.json,它们被转换为A、B、C类。

现在我想从其他数据源实例化A,B,C的对象。

代码语言:javascript
复制
sub generate_classes_from_schema {
    my $self = shift;
    foreach my $cname('A', 'B', 'C') {
        my $class_def = Class::MOP::Class->create($cname); 

        foreach my $att_name(get_attrib_list($cname)) {
            $class_def->add_attribute($att_name);
        }
        $self->{class_defs}->{$cname} = $class_def;
     }
 }
...
...
sub generate_object_map {
    my $self = shift;
    my $query_key = shift;
    my $obj_map = {};

    foreach my $cname('A', 'B', 'C') {
        my $row = get_rowfor_entity($cname, $query_key);
        my $entity_object = $self->{class_defs}->{$cname}->new_object(%{$row});         
        push(@{$obj_map->{$cname}, $entity_object);
    }
    return $obj_map;
}

当我转储obj_map时,它只对每个属性有一个键-值对的散列...

代码语言:javascript
复制
        'A' =>
                 bless( {
                              'att_name' => 'my-att1',
                              'att1' => '4',
                              'att2' => 'false',
                              'att2' => 'true',
                            }, 'A' )

我希望对象至少应该有自动生成的属性访问器方法。此外,当尝试将方法添加到class_def $class_def-> add _method(...)这些方法也不会反映在来自obj_map的对象实例中。

有人能解释一下我哪里错了吗?或者应该采取什么正确的方法?

EN

回答 1

Stack Overflow用户

发布于 2012-06-27 23:09:31

如果要为属性创建访问器,则必须定义访问器的名称。有关属性和方法创建和自省的更多信息,请参阅Class::MOP::Class文档。

代码语言:javascript
复制
my $class = Class::MOP::Class->create('Foo');

# Attribute & method creation.
$class->add_attribute(bar => (accessor => 'bar'));
$class->add_method(buz => sub { return 'buz'; });

# Attribute & method introspection.
$class->get_all_attributes();
$class->get_all_methods();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11218315

复制
相关文章

相似问题

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