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

गो में स्लाइस तर्कों के लिए ~[]ई बनाम []ई का उपयोग कब करें?

2024-11-04 को प्रकाशित
ब्राउज़ करें:240

When to Use ~[]E vs []E for Slice Arguments in Go?

जेनेरिक स्लाइस तर्कों की सूक्ष्मताओं की खोज

प्रयोगात्मक स्लाइस पैकेज से दो कार्यों पर विचार करें: सम्मिलित करें और बढ़ें। दोनों फ़ंक्शन स्लाइस तर्क स्वीकार करते हैं, लेकिन विभिन्न प्रकार की बाधाओं के साथ:

प्रकार की बाधाएं

Contains के पहले तर्क में प्रकार है []ई, जहां ई तुलनीय द्वारा बाधित है, यह दर्शाता है कि ई तुलनीय होना चाहिए . दूसरी ओर, ग्रो के पहले तर्क में S प्रकार है, जो ~[]E द्वारा बाधित है, यह दर्शाता है कि S में एक अंतर्निहित प्रकार होना चाहिए जो E का एक टुकड़ा है।

व्यावहारिक निहितार्थ

पहली नज़र में, ऐसा लग सकता है कि इन दो प्रकार की बाधाओं के उपयोग के बीच कोई व्यावहारिक अंतर नहीं है। हालाँकि, यह ऐसा मामला नहीं है जब आपको ग्रो में तर्क के समान प्रकार का एक स्लाइस वापस करने की आवश्यकता होती है। इनपुट तर्क के समान प्रकार का एक स्लाइस, आपको एक प्रकार के पैरामीटर का उपयोग करना चाहिए जो स्वयं एक स्लाइस तक सीमित हो (उदाहरण के लिए, ~[]ई)। यह फ़ंक्शन को तर्क के समान प्रकार का मान लौटाने की अनुमति देता है।

ग्रो के साथ एक प्रदर्शन

आइए ग्रो के दो कार्यान्वयनों पर विचार करें:

func Grow[S ~ []ई, ई कोई भी](एस एस, एन इंट) एस // ग्रो एस के समान प्रकार का एक टुकड़ा लौटाता है func Grow2[E कोई भी](s []E, n int) []E // Grow2 प्रकार का एक स्लाइस लौटाता है []E

जब एक कस्टम प्रकार के स्लाइस को उसके अंतर्निहित प्रकार के रूप में एक स्लाइस के साथ पास किया जाता है , Grow उसी प्रकार का मान लौटा सकता है, जबकि Grow2 नहीं लौटा सकता। Grow2 केवल एक अनाम स्लाइस प्रकार का मान लौटा सकता है, []ई.

func Grow[S ~[]E, E any](s S, n int) S // Grow returns a slice of the same type as s
func Grow2[E any](s []E, n int) []E // Grow2 returns a slice of type []E

type ints []int // उपयोगकर्ता-परिभाषित स्लाइस प्रकार ints x := []int{1} // प्रकार का एक स्लाइस x प्रारंभ करें []int x2 := Grow(x, 10) // x2 प्रकार का होगा []int y := ints{1} // प्रकार ints का एक स्लाइस y प्रारंभ करें y2 := Grow(y, 10) // y2 ints प्रकार का होगा

यहां, Grow2(y, 10) प्रकार ints का मान प्राप्त करता है लेकिन प्रकार का मान देता है []int, जो नहीं है वांछित व्यवहार। (~[]ई) आवश्यक है। अन्यथा, एक प्रकार पैरामीटर जो केवल तत्व प्रकार (ई कोई भी) को बाधित करता है, का उपयोग किया जा सकता है।

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729668019 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3