गो जेनरिक में यूनियन बाधाओं पर कॉलिंग के तरीके
गो जेनरिक (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