ho messo insieme un po 'di banco di prova per dimostrare il mio problema:Come mai MooseX :: Storage sembra non seguire i tratti degli attributi di alcuni oggetti?
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);
mi si aspetterebbe questo per stampare l'oggetto, ma non il 'lol' attributo nel pacchetto P2 - Tuttavia, posso ancora vedere questo nel risultato di $stored->pack
$VAR1 = {
'__CLASS__' => 'P1',
'blah' => bless({
'magic' => 'This ok!',
'lol' => sub { "DUMMY" }
}, 'P3')
};
Sto usando MooseX :: bagagli sbagliato, o Ti sembra comportamento buggy?
So che questo è vecchio, ma in realtà non sembra essere un bug. Come sottolinea "draegtun", mancano le informazioni sul tipo in modo che l'attributo 'blah' non venga effettivamente serializzato da MooseX :: Storage. Se fosse serializzato, non vedresti il 'benedire', ma vedrai invece la chiave '__CLASS__'. MooseX :: Storage fa la maggior parte del suo collasso in base al vincolo di tipo fornito nell'attributo, senza che sia lasciato a indovinare. –