2009-03-07 10 views
6

मैं एक साथ डाल दिया है एक छोटे से परीक्षण का मामला मेरी समस्या प्रदर्शित करने के लिए:MooseX कैसे आते हैं :: स्टोरेज कुछ ऑब्जेक्ट्स के लिए विशेषता गुणों का पालन नहीं करता है?

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

मैं इस वस्तु मुद्रित करने के लिए उम्मीद करेंगे, लेकिन 'lol' P2 पैकेज में विशेषता - हालांकि, मैं अभी भी यह देख सकते $stored->pack

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

के परिणाम में मैं MooseX :: भंडारण गलत का उपयोग कर रहा हूँ, या इस गाड़ी व्यवहार कैसा दिखता है?

+2

मुझे पता है कि यह पुराना है, लेकिन वास्तव में यह एक बग प्रतीत नहीं होता है। जैसा कि 'draegtun' बताता है, आप प्रकार की जानकारी खो रहे हैं, इसलिए 'blah' विशेषता वास्तव में MooseX :: संग्रहण द्वारा क्रमबद्ध नहीं हो रही है। अगर इसे क्रमबद्ध किया जा रहा था, तो आपको 'आशीर्वाद' नहीं दिखाई देगा, बल्कि इसके बजाय '__CLASS__' कुंजी दिखाई देगी। MooseX :: स्टोरेज सबसे अधिक विशेषता है जो विशेषता में दी गई प्रकार की बाधा के आधार पर गिर रहा है, इसके बिना यह अनुमान लगाने के लिए छोड़ दिया गया है। –

उत्तर

1

आप blah 'पी 3 का एक इसा कर सकते हैं ....

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

में MooseX :: भंडारण के खिलाफ बग की रिपोर्ट कर सकते हैं और अब डम्पर ($ stored-> पैक) यह दिखाता है ....

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

जो इस मूस ऑब्जेक्ट के लिए सही क्रमबद्धता की तरह दिखता है?

8

यूप जो एक बग की तरह दिखता है। क्या आप इसे एक परीक्षण में बदल सकते हैं जो टेस्ट :: अधिक का उपयोग करता है और इसे आरटी कतार में सबमिट करता है और कोई (शायद मुझे) इसे ठीक करेगा।

ध्यान दें कि यदि आप $ obj-> स्टोर को डंप करते हैं तो आप देखते हैं कि विशेषता सीधे विशेषता पर लागू होती है लेकिन ऐसा लगता है कि यह विरासत प्रक्रिया के दौरान खो रहा है।

आप RT

+0

कृपया इसे सबमिट करने के लिए जगह का लिंक प्रदान करें? धन्यवाद! – Ether