Ich habe zusammen einen kleinen Test Fall setzen, mein Problem zu demonstrieren:Wie kommt es, dass MooseX :: Storage bei einigen Objekten nicht den Attributen zu folgen scheint?
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);
Ich würde erwarten, dass dies das Objekt drucken, aber nicht das ‚lol‘ Attribut in dem P2-Paket - aber das kann ich noch sehen im Ergebnis der $stored->pack
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => bless({
'magic' => 'This ok!',
'lol' => sub { "DUMMY" }
}, 'P3')
};
Bin ich mit MooseX :: Speichern falsch, oder dies wie Buggy Verhalten aus?
Ich weiß, das ist alt, aber eigentlich scheint es kein Fehler zu sein. Wie 'draegtun' herausfindet, fehlt dir die Typinformation, so dass das Attribut 'blah' von MooseX :: Storage überhaupt nicht serialisiert wird. Wenn es serialisiert wurde, würden Sie das "segne" nicht sehen, sondern stattdessen die Taste "__CLASS__". MooseX :: Storage kollabiert am meisten basierend auf der Typbeschränkung, die im Attribut angegeben ist, ohne dass es raten würde. –