2009-03-07 17 views
6

He juntado un poco de caso de prueba para demostrar mi problema:¿Cómo puede ser que MooseX :: Storage no siga los atributos de atributos para algunos objetos?

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); 

Yo esperaría esta opción para imprimir el objeto, pero no el 'lol' atributo en el paquete P2 - sin embargo, todavía puedo ver esto en el resultado de $stored->pack

$VAR1 = { 
      '__CLASS__' => 'P1', 
      'blah' => bless({ 
          'magic' => 'This ok!', 
          'lol' => sub { "DUMMY" } 
          }, 'P3') 
     }; 

Estoy usando MooseX :: almacenamiento incorrecto, o se parece esto un comportamiento incorrecto?

+2

Sé que esto es viejo, pero en realidad no parece ser un error. Como 'draegtun' señala, se echa en falta la información de tipo lo que el atributo 'bla' no es en realidad conseguir serializado por MooseX :: Almacenamiento en absoluto. Si se serializara, no verías la 'bendición', sino que verías la tecla '__CLASS__'. MooseX :: Storage hace la mayoría de colapsar en función de la restricción de tipo proporcionada en el atributo, sin que se deje adivinar. –

Respuesta

1

Puede hacer 'bla' un ISA de P3 ....

has 'blah' => (
    is => 'rw', 
    isa => 'P3', 
); 

y ahora Volquete ($ con acumulación> pack) muestra esto ....

$VAR1 = { 
     '__CLASS__' => 'P1', 
     'blah' => { 
        '__CLASS__' => 'P3', 
        'magic' => 'This ok!' 
       } 
}; 

que parece la serialización correcta para este objeto Moose?

8

Sí que se ve como un error. ¿Puede convertir esto en una prueba que utiliza Test :: More y enviarlo a la cola de RT y alguien (probablemente yo) solucionará eso.

Tenga en cuenta que si vuelca $ obj-> tienda que ver que el rasgo se aplica adecuadamente al atributo directa pero parece que se está haciendo pierde durante el proceso de herencia.

Puede informar de los errores contra MooseX :: Almacenamiento en RT

+0

Proporcione un enlace al lugar para enviar esto? ¡Gracias! – Ether

Cuestiones relacionadas