2014-06-11 4 views
12

देखो:स्विफ्ट में इस सामान्य प्रकार की बाधा का क्या अर्थ है? स्विफ्ट में <code>+=</code> ऑपरेटर का अधिभार कि आप किसी संग्रह से तत्वों को जोड़ने की सुविधा देता है के लिए परिभाषा पर

/// Append the elements of rhs to lhs 
func +=<T, C : Collection where T == T>(inout lhs: ContiguousArrayBuffer<T>, rhs: C) 
           ^^^^^^ 

T == T बाधा क्या करता है? हमें इसकी आवश्यकता क्यों है? यह एक छोटी सी बाधा की तरह दिखता है जो हमेशा सत्य होता है।

+1

इस वैश्विक ऑपरेटर ओवरलोड फ़ंक्शन के अंदर यह अजीब लग रहा है ... हालांकि इसका उपयोग करने वाले अन्य स्थानों को देखते हुए, जैसे 'एक्सटेंशन टी []: ऐरेटाइप {init (_ एस: एस)} 'ऐसा लगता है कि यह सुनिश्चित करने की कोशिश कर रहा है कि तर्क अनुक्रम के तत्वों में वही प्रकार है जैसा आप प्रारंभ करने की कोशिश कर रहे हैं। मुझे यकीन नहीं है कि इस वाक्यविन्यास के माध्यम से इसे कैसे लागू किया जाता है .. – Jack

उत्तर

6

एक्सकोड में आप जो परिभाषाएं देखते हैं वह वास्तव में मान्य स्विफ्ट कोड नहीं है। यह मूल फ़ाइलों से उड़ने पर किसी भी तरह से उत्पन्न होता है

मुझे लगता है कि T == T भाग मूल फ़ाइलों को कम करते समय जेनरेटर द्वारा किया गया एक गलती है।

मैंने अपने द्वारा एक समान कार्य को परिभाषित करने का प्रयास किया है और T == T आवश्यक नहीं है, यह वास्तव में कभी-कभी चेतावनी को ट्रिगर करता है।

+0

जब मैं अपने डेस्कटॉप पर हूं तो मैं विस्तृत करूंगा। – Sulthan

+1

मेरा मानना ​​है कि आप सही हैं। घोषणा स्वचालित रूप से जेनरेट की जाती है। 1/आप फ़ाइंडर में फ़ाइल नहीं दिखा सकते हैं। 2/प्रतीकों को ASCII आदेश के साथ नाम से क्रमबद्ध किया जाता है। कोई भी मनुष्य इस तरह कोड को सॉर्ट नहीं करेगा। 3/कुछ एक्सटेंशन खाली हैं जो बताते हैं कि उनमें कोड शामिल है जिसे पार्स/रूपांतरित नहीं किया गया था। 5/घोषणा अधूरा है। उदाहरण के लिए, 'म्यूटेटिंग' के रूप में कोई विधि घोषित नहीं की जाती है, जिसका अर्थ है कि हम निरंतर किसी भी विधि का उपयोग करने में सक्षम होना चाहिए (लेकिन हम नहीं कर सकते)। –

+1

@ निकोलसबैचस्मिडट कुछ अमान्य व्याकरण भी है, उदा। 'एक्सटेंशन टी []'। मैं इस मामले में 'टी == टी' विश्वास करता हूं क्योंकि यह कार्य एक निजी प्रोटोकॉल के कार्यान्वयन का हिस्सा है। – Sulthan

संबंधित मुद्दे