पायथन में, __init__ एक वर्ग को प्रारंभ करने के लिए प्रयोग किया जाता है:

class Auth(object):
    def __init__(self, oauth_consumer, oauth_token=None, callback=None):
        self.oauth_consumer = oauth_consumer
        self.oauth_token = oauth_token or {}
        self.callback = callback or 'http://localhost:8080/callback'

    def HMAC_SHA1():
        pass

पर्ल 6 में init की समतुल्य विधि क्या है? क्या विधि new है?

10
chenyf 28 मार्च 2018, 18:38

2 जवाब

सबसे बढ़िया उत्तर

क्रिस्टोफर बॉटम्स और ब्रैड गिल्बर्ट के उत्तर सही हैं। हालांकि, मैं कुछ चीजों को इंगित करना चाहता हूं जो पाइथन और पर्ल 6 के बीच समानता को समझना आसान बना सकते हैं। सबसे पहले, पायथन से Perl6 तक जाने के बारे में यह पेज उनसे भरा है, जिसमें कक्षाओं और वस्तुओं पर यह अनुभाग

कृपया ध्यान दें कि Perl6 में __init__ के बराबर है... कुछ भी नहीं। डिफॉल्ट सहित इंस्टेंस वैरिएबल से कंस्ट्रक्टर स्वचालित रूप से उत्पन्न होते हैं। हालाँकि, कंस्ट्रक्टर को कॉल करने के लिए केवल पायथन में वर्ग के नाम की आवश्यकता होती है, जबकि यह पर्ल 6 में new का उपयोग करता है।

दूसरी ओर, उस डिफ़ॉल्ट व्यवहार को ओवरराइड करने के कई अलग-अलग तरीके हैं, परिभाषित करने से लेकर BUILD, BUILDALL का इस्तेमाल करने के लिए अपना खुद का new या, और भी बेहतर, TWEAK (जिन्हें आमतौर पर submethods के रूप में परिभाषित किया जाता है, इसलिए उपवर्गों द्वारा इनहेरिट नहीं किया जाता है)।

अंत में, आपके पास पर्ल 6 विधियों के भीतर ही वस्तु को संदर्भित करने के लिए self है। हालांकि, हम इसे आम तौर पर इस तरह देखेंगे (जैसा कि ऊपर के उदाहरणों में है) self.instance-variable$!instance-variable (और कृपया ध्यान दें कि - पर्ल 6 में एक पहचानकर्ता का वैध रूप से हिस्सा हो सकता है)।

11
raiph 9 अप्रैल 2018, 22:52

पांडित्यपूर्ण होने के लिए निकटतम वाक्यात्मक समकक्ष submethod BUILD (या TWEAK) बनाना होगा।

यह निकटतम अनुवाद है:

class Auth {
    has $.oauth_consumer;
    has $.oauth_token;
    has $.callback;

    submethod BUILD ( \oauth_consumer, \oauth_token=Nil, \callback=Nil ) {
        $!oauth_consumer = oauth_consumer;
        $!oauth_token = oauth_token // {};
        $!callback = callback // 'http://localhost:8080/callback';
    }

    method HMAC_SHA1 ( --> 'pass' ) {}
}

यह थोड़ा और मुहावरेदार है

class Auth {
    has $.oauth_consumer;
    has $.oauth_token;
    has $.callback;

    submethod BUILD (
        $!oauth_consumer,
        $!oauth_token = {},
        $!callback = 'http://localhost:8080/callback',
    ) {
        # empty submethod
    }

    method HMAC_SHA1 ( --> 'pass' ) {}
}

वास्तव में मुहावरेदार होने के लिए मैं वही लिखूंगा जो क्रिस्टोफर ने किया था।

9
Brad Gilbert 29 मार्च 2018, 12:39