मैंने कक्षाओं और इंटरफेस का एक सेट लिखा है जो भूमिकाओं का उपयोग करके Moose में लागू किए गए हैं। मुझे समझ में परेशानी हो रही है जो मूस गुण बनाम भूमिकाओं के उपयोग और कार्यान्वयन दोनों में सटीक अंतर है।मूस में भूमिकाएं और लक्षण कैसे भिन्न होते हैं?
Moose documentation कहता है:
यह समझना महत्वपूर्ण है कि भूमिकाओं और लक्षण एक ही बात कर रहे हैं महत्वपूर्ण है। एक विशेषता के रूप में एक भूमिका का उपयोग किया जा सकता है, और एक विशेषता एक भूमिका है। दोनों चीजों को अलग करने वाली एकमात्र चीज यह है कि एक विशेषता इस तरह से पैक की जाती है जो मूस को कक्षा के नाम पर संक्षिप्त नाम हल करने देता है। दूसरे शब्दों में, एक विशेषता के साथ, कॉलर इसे "बिग" जैसे संक्षिप्त नाम से संदर्भित कर सकता है, और मूस इसे MooseX :: Embiggen :: मेटा :: विशेषता :: भूमिका :: बिग जैसी कक्षा में हल कर देगा।
यह मेरी समझ है कि लक्षण और भूमिकाएं "समान" हैं। हालांकि, use Moose -traits 'Foo'
सिंटैक्स का उपयोग करके विचार के मूल परीक्षण को लागू करने पर मुझे लगता है कि मैं क्या अपेक्षा करता हूं। निश्चित रूप से मुझे यहां कुछ याद आना चाहिए।
यह पहला उदाहरण के साथ विफल रहता है "वस्तु विधि पता नहीं लगा सकता 'foo'"
package MyApp::Meta::Class::Trait::HasTable;
use Moose::Role;
sub foo { warn 'foo' }
package Moose::Meta::Class::Custom::Trait::HasTable;
sub register_implementation { 'MyApp::Meta::Class::Trait::HasTable' }
package MyApp::User;
use Moose -traits => 'HasTable';
__PACKAGE__->foo(); #Can't locate object method 'foo'
इस एक की तुलना में (जो काम करता है):
package MyApp::Meta::Class::Trait::HasTable;
use Moose::Role;
sub foo { warn 'foo' }
package Moose::Meta::Class::Custom::Trait::HasTable;
sub register_implementation { 'MyApp::Meta::Class::Trait::HasTable' }
package MyApp::User;
use Moose;
with 'MyApp::Meta::Class::Trait::HasTable';
__PACKAGE__->foo(); #foo
धन्यवाद, जो मैं देख रहा था व्यवहार बताता है। – Danny
मैंने इस अंतर को थोड़ा सा प्रतिबिंबित करने के लिए विस्तार/पकाने की विधि 1.pod में पाठ को अद्यतन किया है। चीजों को भ्रमित करने के लिए भी ध्यान दें, रोल-जैसी चीजों को स्कैला जैसी अन्य भाषाओं में लक्षण कहा जाता है। इन लक्षणों को कुछ कागजात में परिभाषित किया गया है जो मूस की भूमिका कार्यान्वयन की उत्पत्ति को सूचित करते हैं लेकिन राज्यों को ले जाने वाली सुविधाओं की कमी (यानी वे केवल विधियां हैं और उनके पास कोई विशेषता नहीं है)। – perigrin