2012-09-11 4 views
5

मुझे पता चला है कि यदि कोई सबक्लास एक ट्रिगर जोड़ता है, तो बेस क्लास से विधि संशोधक नहीं चलते हैं। यह एक मूस बग, या कम से कम गैर अंतर्ज्ञानी की तरह लगता है।उप-वर्गों में perl moose ट्रिगर्स विधि संशोधक को बाधित करता है

package Foo { 
    use Moose; 

    has 'foo' => (
     is => 'rw', 
     isa => 'Str', 
    ); 

    before 'foo' => sub { 
     warn "before foo"; 
    }; 
}; 

package FooChild { 

    use Moose; 
    extends 'Foo'; 

    has '+foo' => (trigger => \&my_trigger,); 

    sub my_trigger { 
     warn 'this is my_trigger'; 
    } 
}; 

my $fc = FooChild->new(); 
$fc->foo(10); 

आप इस उदाहरण चलाते हैं, तो केवल "इस my_trigger है" रन चेतावनी दी है, और "से पहले" संशोधक नजरअंदाज कर दिया है: यहाँ मेरी उदाहरण है। मैं मूस 2.0402 के साथ पर्ल 5.14.2 का उपयोग कर रहा हूँ।

क्या यह सही व्यवहार है? यह सही प्रतीत नहीं होता है, खासतौर से जब ट्रिगर को बेस क्लास में सीधे परिभाषित किया जाता है तो ट्रिगर आग लग जाएगा।

उत्तर

4

इस सिद्धांत पर कि आप कक्षा में विरासत कोड और कोड के बीच अंतर करने में सक्षम नहीं होना चाहिए, मैं इसे एक बग कहूंगा।

यह एक सामान्य समस्या प्रतीत होती है जहां एक विशेषता को जोड़ना विधि संशोधक को हटा देता है। यह कोड ट्रिगर्स को शामिल किए बिना आपकी बग का प्रदर्शन करता है।

package Foo { 
    use Moose; 

    has 'foo' => (
     is => 'rw', 
     isa => 'Str', 
     default => 5, 
    ); 

    before 'foo' => sub { 
     warn "before foo"; 
    }; 
}; 

package FooChild { 

    use Moose; 
    extends 'Foo'; 

    has '+foo' => (default => 99); 
}; 

my $fc = FooChild->new(); 
print $fc->foo; 

Please report this to the Moose folks

+0

ठीक है, मैंने यहां एक बग रिपोर्ट जोड़ा: https://rt.cpan.org/Public/Bug/Display.html?id=79572। इस बीच मैं उप-वर्ग में विधि संशोधक को दोहराने के द्वारा इसके आसपास काम कर सकता हूं। – rrm1

संबंधित मुद्दे