我一直在寻找一个 Perl 模块,它可以将 YAML 文件转换为 moose 对象,而不必像使用 MooseX::YAML 时那样预先声明结构。有谁知道这样的模块(或脚本)?
最佳答案
别。
Moose 类、它们的属性以及属于它们的任何其他东西,都附有大量元数据。您无法从单个实例的数据中推断出所有元数据。
我假设,给定一个 yaml 文档作为
---
foo: 42
bar: ['moo', 'kooh']
你会期望和对象返回响应对
foo
和 bar
方法的调用,返回各自的值。但是这些访问者应该如何表现呢?它们应该是简单的读者方法,还是也允许写作?他们是否应该根据任何类型的约束进行验证?等等。如果您真正需要的只是使某些无福的数据结构像对象一样可以访问,请查看
Data::Hive
、 Hash::AsObject
和类似的模块。如果您真的想构建适当的 Moose 类,并且可以接受所涉及的猜测,或者碰巧在某处拥有必要的元数据,则可以使用元协议(protocol)。
my $class = Moose::Meta::Class->create_anon_class(
attributes => [map {
# your particular set of assumptions here
Moose::Meta::Attribute->new($_ => (is => 'ro', ...))
} keys %{ $deserialized_yaml }],
);
my $instance = $class->name->new($deserialized_yaml);
$instance->$some_key_in_the_yaml_document;
关于perl - 是否有 Perl 模块用于在运行时将 YAML 文件动态转换为 Moose 对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3949341/