मैं एक मूस :: रोल क्लास को लागू करने की कोशिश कर रहा हूं जो जावा में एक अमूर्त वर्ग की तरह व्यवहार करता है। मैं भूमिका में कुछ तरीकों को लागू करना चाहता हूं, लेकिन फिर ठोस वर्गों में उन विधियों को ओवरराइड करने की क्षमता है। यदि मैं कक्षाओं का विस्तार करता हूं तो उसी शैली का उपयोग करके यह कोशिश करता हूं मुझे त्रुटि Cannot add an override method if a local method is already present
मिलती है।मूस :: रोल में सब को ओवरराइड कैसे करें?
मेरे सार वर्ग:
package AbstractClass;
use Moose::Role;
sub my_ac_sub {
my $self = shift;
print "In AbstractClass!\n";
return;
}
1;
मेरे ठोस वर्ग:
package Class;
use Moose;
with 'AbstractClass';
override 'my_ac_sub' => sub {
my $self = shift;
super;
print "In Class!\n";
return;
};
__PACKAGE__->meta->make_immutable;
1;
और फिर:
use Class;
my $class = Class->new;
$class->my_ac_sub;
मैं कुछ गलत कर रहा हूँ यहाँ एक उदाहरण है? क्या मैं पूरा करने की कोशिश कर रहा हूं जिसे अलग तरीके से किया जाना चाहिए? क्या मैं ऐसा करने की कोशिश कर रहा हूं जो बिल्कुल नहीं किया जाना चाहिए?
एक अमूर्त वर्ग का मॉडल करने के लिए एक अमूर्त वर्ग का उपयोग करें! यह आपको बस निर्माण को असंभव बनाने की आवश्यकता है (यानी एक बिल्ड प्रदान करें जो एक त्रुटि फेंकता है)। – amon
शायद ऐसा करने का मूस तरीका 'my_ac_sub' की आवश्यकता है; 'भूमिका में, * नहीं * "वर्चुअल" विधि। मूस :: रोल तब जांच करेगा कि इसे उपलब्ध विधि के साथ कक्षा में बनाया गया है, –
मैंने कोड चलाने की कोशिश की है और फिर 'sub my_ac_sub' द्वारा ओवरराइड को प्रतिस्थापित किया है और अचानक यह अपेक्षा के अनुसार काम करता है। क्या उस "फिक्स" में कुछ गड़बड़ है? (अस्वीकरण: मैं मूस के लिए नया हूँ)। – Dallaylaen