हम पहले एक पूर्ण और निरीक्षण उदाहरण की स्थापना:
precedencegroup LongArrowPrecedence {
associativity: left
higherThan: AssignmentPrecedence
}
infix operator --> : LongArrowPrecedence
func -->(lhs: Int, rhs: Int) -> (() ->()) ->() {
return { print(lhs+rhs, terminator: ""); $0() }
}
साथ ही इस ऑपरेटर का उपयोग paranthesis-गले लगा लिया मान्य कॉल के उदाहरण हैं, तुरंत बंद जो -->
रिटर्न के लिए एक कॉल के बाद।
let foo = 1
let bar = 2
// OK
(foo --> bar) {
print(" is the magic number")
} // 3 is the magic number
// OK
((-->)(foo, bar)) {
print(" is the magic number")
} // 3 is the magic number
यह हमें बहुत नहीं बताता है, लेकिन अगर हम निम्नलिखित में नाकाम रहने के मामलों का अध्ययन
// ERROR: cannot call value of non-function type 'Int'
foo --> bar {
print(" is the magic number")
} // 3 is the magic number
// ... equivalent to
// ERROR: cannot call value of non-function type 'Int'
foo --> bar({
print(" is the magic number")
}) // 3 is the magic number
हम समझते हैं कि इस मुद्दे को यहाँ "पूर्वता को बंद करने की तुलना में कम" नहीं है, बल्कि कि function-call-argument-clause (किसी भी पोस्टफिक्स-अभिव्यक्ति के बाद पैराथेस का एक सेट) उस पोस्टफिक्स-अभिव्यक्ति के लिए कॉल पर कॉल करेगा, जैसे कि पोस्टफिक्स-अभिव्यक्ति एक विधि/कार्य/बंद थी। यदि पोस्टफिक्स-अभिव्यक्ति कॉल करने योग्य नहीं है, या यदि फ़ंक्शन-कॉल-तर्क-खंड के भीतर कॉल कॉल करने योग्य के किसी भी अधिभार से मेल नहीं खाता है, तो संकलक एक त्रुटि उत्पन्न करेगा। जबकि प्रमुख मुद्दा है कि स्विफ्ट एक समारोह-कॉल-तर्क-क्लॉज लागू होगी यह बस लौटे बंद करने के लिए एक तर्क दिया गया है:
42() // ERROR: cannot call value of non-function type 'Int'
let foo = 42
foo() // ERROR: cannot call value of non-function type 'Int'
func bar() {} // ERROR: argument passed to call that takes no arguments
bar(42)
इसलिए, अनुगामी बंद बंद -->
से लौटे करने के लिए आपूर्ति नहीं प्रासंगिक यहाँ है पोस्टफिक्स-अभिव्यक्ति के लिए जो तुरंत खंड से पहले है। उदाहरण में, bar
उस पोस्टफिक्स अभिव्यक्ति का गठन करता है, और केवल तभी जब आप पैरामीटर में foo --> bar
लपेटते हैं तो संयुक्त लिपटे अभिव्यक्ति पोस्टफिक्स-अभिव्यक्ति का गठन करेगी जिस पर निम्न फ़ंक्शन-कॉल-तर्क-खंड लागू होता है।
पोस्टफिक्स भाव
पोस्टफिक्स भाव एक अभिव्यक्ति के लिए एक पोस्टफ़िक्स ऑपरेटर या अन्य पोस्टफ़िक्स वाक्य रचना लगाने से बनते हैं। संवैधानिक रूप से, प्रत्येक प्राथमिक अभिव्यक्ति भी एक पोस्टफिक्स अभिव्यक्ति है।
प्राथमिक भाव
प्राथमिक भाव एक्सप्रेशन का सबसे बुनियादी प्रकार हैं। वे हो सकते हैं जो स्वयं के रूप में अभिव्यक्ति के रूप में उपयोग किए जाते हैं, और उन्हें उपसर्ग अभिव्यक्तियों, बाइनरी अभिव्यक्तियों और पोस्टफिक्स अभिव्यक्तियों को बनाने के लिए अन्य टोकन के साथ जोड़ा जा सकता है।
आप इसे रोकने में सक्षम नहीं होंगे, क्योंकि ऑपरेटर प्राथमिकता फ़ंक्शन-कॉल-तर्क-खंड पर लागू नहीं होती है; उत्तरार्द्ध (और इसकी "प्राथमिकता") को फ़ंक्शन कॉल अभिव्यक्ति के व्याकरण द्वारा परिभाषित किया गया है।