我在 JSON 文件中有模式定义,我想使用 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 的 Object 实例中。
有人可以解释一下我哪里出错了或者应该是什么正确的方法?