tôi đã đặt cùng một trường hợp thử nghiệm nhỏ để chứng minh vấn đề của tôi:Làm thế nào để MooseX :: Lưu trữ dường như không theo đặc điểm thuộc tính đối với một số đối tượng?
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);
tôi sẽ mong đợi điều này để in các đối tượng, nhưng không phải là 'lol' thuộc tính trong gói P2 - tuy nhiên, tôi vẫn có thể thấy điều này trong kết quả của $stored->pack
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => bless({
'magic' => 'This ok!',
'lol' => sub { "DUMMY" }
}, 'P3')
};
Tôi đang sử dụng MooseX :: Lưu trữ sai, hoặc có vẻ như hành vi lỗi?
Tôi biết điều này là cũ, nhưng thực sự nó không có vẻ là một lỗi. Như 'draegtun' chỉ ra, bạn đang thiếu thông tin loại nên thuộc tính 'blah' không thực sự được tuần tự hóa bởi MooseX :: Storage. Nếu nó đã được đăng, bạn sẽ không thấy 'phước lành', mà thay vào đó hãy nhìn thấy phím '__CLASS__'. MooseX :: Lưu trữ hầu hết nó sụp đổ dựa trên ràng buộc kiểu được cung cấp trong thuộc tính, mà không có nó để lại để đoán. –