2009-09-04 13 views
9

मैं एक सिंगलटन कक्षा बनाना चाहता हूं जो डीबीआई को बढ़ाता है।पर्ल में 'उपयोग आधार' और @ISA के बीच क्या अंतर है?

use base 'Class::Singleton'; 
our @ISA = ('DBI');

या इस:

our @ISA = ('Class::Singleton', 'DBI');

या कुछ और मैं कुछ इस तरह कर रही किया जाना चाहिए?

वास्तव में यह सुनिश्चित नहीं है कि 'उपयोग आधार' और 'आईएसए' के ​​बीच क्या अंतर है।

+2

खैर, base.pm प्रलेखन आप अंतर बताता है। –

उत्तर

4

मुझे लगता है कि base के बजाय आपको parent प्राग्मा का उपयोग करना चाहिए जैसा कि perldoc base में सुझाया गया है।

+1

5.10 में 'माता-पिता' नया है? यह होना चाहिए, क्योंकि यह मेरे 5.8 दस्तावेज में नहीं है। – Ether

+0

मुझे यकीन नहीं है। हालांकि, चास के बयान को उद्धृत करते हुए: "... मूल प्रज्ञा पर्ल 5.10.1 के रूप में नई है, लेकिन यदि आपके पास पर्ल का पुराना संस्करण है तो यह सीपीएएन से स्थापित किया जा सकता है ..." –

8

@ISA की विशिष्ट उपयोग

package Foo; 

require Bar; 
our @ISA = qw/Bar/; 

base और parent pragmas है दोनों का अनुरोध वर्ग लोड और @ISA संशोधित इसे शामिल करने की:

package Foo; 

use base qw/Bar/; 

आप एकाधिक वंशानुक्रम चाहते हैं, आप की आपूर्ति कर सकते base या parent:

पर एक से अधिक मॉड्यूल

parent प्राग्मा पर्ल 5.10.1 के रूप में नया है, लेकिन यदि आपके पास पर्ल का पुराना संस्करण है तो यह सीपीएएन से स्थापित है। यह बनाया गया था क्योंकि base प्रगामा को बनाए रखने वाले क्रुफ्ट के कारण बनाए रखना मुश्किल हो गया था। आपको दोनों के बीच बुनियादी उपयोग में कोई अंतर नहीं दिखना चाहिए।

3
आधार के perldoc से

...

package Baz; 

use base qw(Foo Bar); 

निजी तौर पर अनिवार्य रूप से

package Baz; 

BEGIN { 
    require Foo; 
    require Bar; 
    push @ISA, qw(Foo Bar); 
} 

के बराबर है, मैं आधार का उपयोग करें।

+1

नवीनतम बेस.pm लोगों को बताता है माता-पिता का प्रयोग करें, जो 5.10.1 में है। :) –

0

यदि आप मूल वर्ग का उत्तराधिकारी बनाना चाहते हैं तो आपको इसे लोड करना होगा और @ISA संशोधित करना होगा। जब आप आधार का उपयोग करते हैं तो दोनों चरणों का ध्यान रखा जाता है। बेस आपके लिए मॉड्यूल लोड करता है और तदनुसार @ISA को संशोधित करता है। अन्यथा आपको @ISA को संशोधित करने और पैरेंट मॉड्यूल को अपने आप लोड करने की आवश्यकता होगी।

निम्न में से

दोनों बराबर हैं:

use base "Parent"; 

और

require Parent; 
@ISA = ("Parent"); 
संबंधित मुद्दे