我通常将 Storable
与 nstore
一起使用,但现在我有一个 module具有 CODE
且显然 Storable
不喜欢这样。
我找到了 YAML
(以及 I can't really get to work 的 YAML::XS
)。
我还尝试了一些 MooseX::Storage没有取得太大成功。
还有其他选择吗? 您会推荐什么?
最佳答案
您可以使用 Data::Dumper 转储代码引用将 $Data::Dumper::Deparse
设置为 true 值后,但这仅用于调试目的,不适用于序列化。
我建议您回去看看为什么 MooseX::Storage 不适合您,因为作者非常努力地为 Moose 对象序列化提供一个抽象良好且强大的解决方案。
<小时/>更新:看起来您在序列化 _offset_sub
属性时遇到了问题,如 this question 中所述。 。由于该属性有一个构建器,并且它的构造相当简单(它只是查看另一个属性的当前值),因此您根本不需要序列化它——当您反序列化对象并想要再次使用它时,第一次调用 $this->offset
时将调用构建器。因此,您应该能够将其标记为“不序列化”:
use MooseX::Storage;
has '_offset_sub' => (
is => 'ro',
isa => 'CodeRef',
traits => [ 'DoNotSerialize' ],
lazy => 1,
builder => '_build_offset_sub',
init_arg => undef,
);
最后,这有点正交,但您可以折叠偏移
并
使用原生属性“Code”特征将 _offset_sub
属性组合在一起:
has offset => (
is => 'bare',
isa => 'CodeRef',
traits => [ qw(Code DoNotSerialize) ],
lazy => 1,
builder => '_build_offset',
init_arg => undef,
handles => {
offset => 'execute_method',
},
);
sub _build_offset {
my ($self) = @_;
# same as previous _build_offset_sub...
}
关于perl - 哪些推荐的 Perl 模块可以序列化 Moose 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999875/