"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या गो जेनेरिक्स की यूनियन बाधाएं स्पष्ट इंटरफ़ेस घोषणा के बिना साझा तरीकों को कॉल कर सकती हैं?

क्या गो जेनेरिक्स की यूनियन बाधाएं स्पष्ट इंटरफ़ेस घोषणा के बिना साझा तरीकों को कॉल कर सकती हैं?

2024-12-23 को प्रकाशित
ब्राउज़ करें:252

Can Go Generics' Union Constraints Call Shared Methods Without Explicit Interface Declaration?

गो जेनरिक में यूनियन बाधाओं पर कॉलिंग के तरीके

गो जेनरिक (v1.18) में, आप एक प्रकार के यूनियन प्रतिबंध का सामना कर सकते हैं जो सीमित करता है एकीकृत इंटरफ़ेस को लागू करने वाले प्रकारों के लिए पैरामीटर प्रकार। हालाँकि, प्रतिबंधित प्रकारों के बीच साझा तरीकों को कॉल करने में असमर्थता ऐसी बाधाओं की उपयोगिता के बारे में चिंता पैदा करती है।

निम्नलिखित कोड पर विचार करें:

type A struct {}
type B struct {}
type AB interface { *A | *B }

func (a *A) some() bool { return true }
func (b *B) some() bool { return false }

func some[T AB](x T) bool { return x.some() } // Compiler error

कंपाइलर त्रुटि "x.some अपरिभाषित" इस तथ्य के कारण है कि टाइप यूनियन बाधा *ए | *बी *ए और *बी दोनों पर कुछ विधि के अस्तित्व की गारंटी नहीं देता है।

इस समस्या को हल करने के लिए, आप इंटरफ़ेस बाधा में विधि जोड़ सकते हैं:

type AB interface { *A | *B; some() bool }

func some[T AB](x T) bool { return x.some() } // Works

यह T को उन प्रकारों तक सीमित करता है जो *A या *B दोनों को लागू करते हैं और some विधि घोषित करते हैं।

हालाँकि, इस समाधान को आदर्श रूप से अकेले टाइप यूनियनों के साथ काम करने के लिए एक समाधान के रूप में देखा जाता है। गो 1.18 में वर्तमान में सीमाएं हैं जहां कंपाइलर टाइप पैरामीटर पी के मान पर एक विधि को कॉल करने का समर्थन करता है केवल यदि विधि एम को पी के बाधा इंटरफ़ेस द्वारा स्पष्ट रूप से घोषित किया गया है। भाषा विनिर्देशों के बावजूद कि इंटरफ़ेस का विधि सेट इंटरफ़ेस के प्रकार सेट में प्रत्येक प्रकार के विधि सेट का प्रतिच्छेदन है। इस मुद्दे को गो 1.19 में संबोधित किए जाने की उम्मीद है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3