अपने सभी निर्माता कर रहा है अपने उदाहरण के रूप में माता पिता के निर्माता (बुला रहा है, तो आप सब पर एक लिखने की जरूरत नहीं है, बस इसे बाहर छोड़ने के लिए और माता पिता होगा कहा जा; तुम सिर्फ यह सुनिश्चित करें कि वस्तु सही प्रकार में आशीर्वाद दिया गया है की जरूरत है:
package Parent;
use strict;
use warnings;
sub new
{
my ($class, @args) = @_;
# do something with @args
return bless {}, $class;
}
1;
आप उपरोक्त कोड का उपयोग करें और एक Child
वर्ग use parent 'Parent';
साथ घोषित है तो जनक निर्माता ठीक से एक बच्चे का निर्माण करेगी
।
यदि ,
package Child;
use strict;
use warnings;
use parent 'Parent';
sub new
{
my ($class, @args) = @_;
# possibly call Parent->new(@args) first
my $self = $class->SUPER::new(@args);
# do something else with @args
# no need to rebless $self, if the Parent already blessed properly
return $self;
}
1;
लेकिन जब आप मिश्रण, आप हर कदम पर ऐसा करना सही फैसला करने के लिए की जरूरत में कई विरासत लाने: आप बच्चे में कुछ गुण जोड़ने की जरूरत है, तो आप क्या था काफी हद तक सही है रास्ते से। इसका अर्थ यह है कि प्रत्येक वर्ग के लिए एक कस्टम कन्स्ट्रक्टर जो निर्णय लेता है कि बच्चे में माता-पिता 1 और माता-पिता 2 के गुणों को कैसे विलय करना है, और अंततः परिणामी वस्तु को बाल वर्ग में आशीर्वाद देता है। यह जटिलता कई कारणों में से एक है क्यों एकाधिक विरासत खराब डिजाइन पसंद है। क्या आपने कुछ वस्तुओं को भूमिकाओं में स्थानांतरित करके संभवतः अपने ऑब्जेक्ट विरासत को फिर से डिजाइन करने पर विचार किया है? इसके अलावा, आप Moose जैसे कुछ व्यस्त कार्य करने के लिए ऑब्जेक्ट फ्रेमवर्क को नियोजित करना चाहेंगे। आजकल कस्टम कन्स्ट्रक्टर लिखना शायद ही कभी जरूरी है।
(अंत में, आप चर $a
और $b
का उपयोग कर से बचना चाहिए, वे पर्ल में अलग व्यवहार किया जाता के रूप में वे प्रकार कार्यों में इस्तेमाल किया चर और कुछ अन्य का निर्माण-इन कर रहे हैं।)
धन्यवाद, यह सबसे आसान तरीका है कुछ है कि काम करता है के लिए मेरे वर्तमान कोड में परिवर्तित करने लगता है। – Zitrax