क्या गो भाषा में कार्य / विधि अधिभार है?


127

मैं जाने के लिए एक सी लाइब्रेरी पोर्ट कर रहा हूं। एसी फंक्शन (वेरगेज के साथ) को इस तरह परिभाषित किया गया है:

curl_easy_setopt(CURL *curl, CURLoption option, ...); 

इसलिए मैंने रैपर सी फ़ंक्शन बनाया:

curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param);
curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param);

अगर मैं इस तरह से समारोह को परिभाषित करता हूं:

func (e *Easy)SetOption(option Option, param string) {
    e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param)))
}

func (e *Easy)SetOption(option Option, param long) {
    e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(param)))
}

गो संकलक शिकायत करता है:

*Easy·SetOption redeclared in this block

तो क्या सपोर्ट फंक्शन (विधि) ओवरलोडिंग है, या इस त्रुटि का मतलब कुछ और है?

जवाबों:


165

नहीं, यह नहीं है।

देखें जाओ भाषा पूछे जाने वाले प्रश्न , और पर विशेष रूप से खंड से अधिक भार

विधि प्रेषण को सरल बनाया जाता है यदि उसे टाइप मिलान करने की आवश्यकता नहीं है। अन्य भाषाओं के साथ अनुभव ने हमें बताया कि एक ही नाम के साथ विभिन्न तरीकों का होना लेकिन विभिन्न हस्ताक्षर कभी-कभी उपयोगी होते थे लेकिन यह व्यवहार में भ्रामक और नाजुक भी हो सकता है। केवल नाम से मिलान और प्रकारों में निरंतरता की आवश्यकता गो के प्रकार प्रणाली में एक प्रमुख सरलीकरण निर्णय था।

अपडेट: 2016-04-07

जबकि गो में अभी भी ओवरलोडेड फ़ंक्शन नहीं हैं (और शायद कभी नहीं), ओवरलोडिंग की सबसे उपयोगी विशेषता, वैकल्पिक तर्कों के साथ एक फ़ंक्शन को कॉल करना और उन छोड़े गए डिफॉल्टों को संदर्भित करने के लिए एक वैरेडिक फ़ंक्शन का उपयोग करके सिम्युलेटेड किया जा सकता है, जिसे जोड़ा गया है। लेकिन यह प्रकार की जाँच के नुकसान पर आता है।

उदाहरण के लिए: http://changelog.ca/log/2015/01/30/golang


20

इसके अनुसार, यह नहीं है: http://golang.org/doc/go_for_cpp_programmers.html

में वैचारिक मतभेद अनुभाग, यह कहते हैं:

"गो फ़ंक्शन ओवरलोडिंग का समर्थन नहीं करता है और उपयोगकर्ता परिभाषित ऑपरेटरों का समर्थन नहीं करता है।"


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.