我在JSON文件中有Schema定义,我希望读取这些定义并使用Class::MOP::Class动态生成类。例如,有JSON文件A.json、B.json、C.json,它们被转换为A、B、C类。
现在我想从其他数据源实例化A,B,C的对象。
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时,它只对每个属性有一个键-值对的散列...
'A' =>
bless( {
'att_name' => 'my-att1',
'att1' => '4',
'att2' => 'false',
'att2' => 'true',
}, 'A' )我希望对象至少应该有自动生成的属性访问器方法。此外,当尝试将方法添加到class_def $class_def-> add _method(...)这些方法也不会反映在来自obj_map的对象实例中。
有人能解释一下我哪里错了吗?或者应该采取什么正确的方法?
发布于 2012-06-27 23:09:31
如果要为属性创建访问器,则必须定义访问器的名称。有关属性和方法创建和自省的更多信息,请参阅Class::MOP::Class文档。
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();https://stackoverflow.com/questions/11218315
复制相似问题