och*_*les 6 perl serialization moose
我已经整理了一个小测试用例来演示我的问题:
package P1;
use Moose;
use MooseX::Storage;
with Storage;
has 'blah' => (
is => 'rw',
);
package P2;
use Moose;
use MooseX::Storage;
with Storage;
has 'lol' => (
is => 'rw',
traits => ['DoNotSerialize']
);
package P3;
use Moose;
extends 'P2';
has 'magic' => (
is => 'rw',
);
package Test;
my $obj = P3->new(
magic => 'This ok!',
lol => sub { 'weee' }
);
my $stored = P1->new(blah => $obj);
use Data::Dumper; print Dumper ($stored->pack);
Run Code Online (Sandbox Code Playgroud)
我希望这打印对象,但不打包P2包中的'lol'属性 - 但是,我仍然可以在结果中看到这个 $stored->pack
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => bless( {
'magic' => 'This ok!',
'lol' => sub { "DUMMY" }
}, 'P3' )
};
Run Code Online (Sandbox Code Playgroud)
我使用MooseX :: Storage是错误的,还是看起来像有错误的行为?
你可以把“blah”作为 P3 的 isa....
has 'blah' => (
is => 'rw',
isa => 'P3',
);
Run Code Online (Sandbox Code Playgroud)
现在 Dumper( $stored->pack ) 显示了这个......
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => {
'__CLASS__' => 'P3',
'magic' => 'This ok!'
}
};
Run Code Online (Sandbox Code Playgroud)
这看起来像是这个 Moose 对象的正确序列化?