मैं गलत हो सकता हूं क्योंकि किसी ने भी इसका उल्लेख नहीं किया है, लेकिन मैं इस धारणा के तहत भी था कि इसका कारण भी कोष्ठक के बिना कार्यों को कॉल करने में सक्षम होने की रूबी विरासत है।
एरियर स्पष्ट रूप से शामिल है, लेकिन इसे थोड़ी देर के लिए अलग रख देता है और बिना तर्क के कार्यों का उपयोग करता है। जावास्क्रिप्ट जैसी भाषा में जहां कोष्ठक अनिवार्य हैं, फ़ंक्शन को तर्क के रूप में पारित करने और फ़ंक्शन को कॉल करने के बीच अंतर करना आसान है। आप इसे केवल तब कहते हैं जब आप कोष्ठक का उपयोग करते हैं।
my_function // argument
(function() {}) // argument
my_function() // function is called
(function() {})() // function is called
जैसा कि आप देख सकते हैं, इसका नामकरण करना या न करना एक बड़ा अंतर नहीं है। लेकिन अमृत और माणिक आपको ब्रैकेट्स के बिना फ़ंक्शन को कॉल करने की अनुमति देते हैं। यह एक डिज़ाइन विकल्प है जो मुझे व्यक्तिगत रूप से पसंद है लेकिन इसका यह दुष्प्रभाव है कि आप बिना कोष्ठक के सिर्फ नाम का उपयोग नहीं कर सकते क्योंकि इसका मतलब हो सकता है कि आप फ़ंक्शन को कॉल करना चाहते हैं। यह वही &
है जिसके लिए है। यदि आप एक दूसरे के लिए एरिटी एपार्ट को छोड़ते हैं, तो अपने फ़ंक्शन नाम को &
इस तरह से प्रस्तुत करने का मतलब है कि आप स्पष्ट रूप से इस फ़ंक्शन को एक तर्क के रूप में उपयोग करना चाहते हैं, न कि यह फ़ंक्शन वापस आता है।
अब अनाम फ़ंक्शन थोड़ा अलग है कि इसका उपयोग मुख्य रूप से एक तर्क के रूप में किया जाता है। फिर से यह एक डिजाइन विकल्प है लेकिन इसके पीछे तर्कसंगत यह है कि इसका उपयोग मुख्य रूप से पुनरावृत्तियों के प्रकारों द्वारा किया जाता है जो कार्यों को तर्क के रूप में लेते हैं। तो जाहिर है आप का उपयोग करने की जरूरत नहीं है &
क्योंकि वे पहले से ही डिफ़ॉल्ट रूप से तर्क माना जाता है। यह उनका उद्देश्य है।
अब अंतिम समस्या यह है कि कभी-कभी आपको उन्हें अपने कोड में कॉल करना होगा, क्योंकि वे हमेशा इट्रेटर प्रकार के फ़ंक्शन के साथ उपयोग नहीं किए जाते हैं, या आप स्वयं एक इटेरिक कोडिंग कर सकते हैं। छोटी कहानी के लिए, चूंकि माणिक ऑब्जेक्ट ओरिएंटेड है, ऐसा करने का मुख्य तरीका call
ऑब्जेक्ट पर विधि का उपयोग करना था । इस तरह, आप गैर-अनिवार्य कोष्ठक व्यवहार को सुसंगत रख सकते हैं।
my_lambda.call
my_lambda.call()
my_lambda_with_arguments.call :h2g2, 42
my_lambda_with_arguments.call(:h2g2, 42)
अब किसी के पास एक शॉर्टकट आया, जो मूल रूप से बिना नाम वाला एक तरीका है।
my_lambda.()
my_lambda_with_arguments.(:h2g2, 42)
फिर, यह एक डिजाइन विकल्प है। अब अमृत वस्तु उन्मुख नहीं है और इसलिए कॉल को सुनिश्चित करने के लिए पहले फ़ॉर्म का उपयोग न करें। मैं जोस के लिए नहीं बोल सकता लेकिन ऐसा लगता है कि अमृत में दूसरे रूप का उपयोग किया गया था क्योंकि यह अभी भी एक अतिरिक्त चरित्र के साथ एक फ़ंक्शन कॉल की तरह दिखता है। यह एक फ़ंक्शन कॉल के लिए पर्याप्त है।
मैंने सभी पेशेवरों और विपक्षों के बारे में नहीं सोचा था, लेकिन ऐसा लगता है कि दोनों भाषाओं में आप केवल कोष्ठक के साथ दूर हो सकते हैं जब तक आप अनाम कार्यों के लिए कोष्ठक को अनिवार्य बनाते हैं। ऐसा लगता है कि यह है:
अनिवार्य कोष्ठक वी.एस. थोड़ा अलग संकेतन
दोनों मामलों में आप एक अपवाद बनाते हैं क्योंकि आप दोनों अलग व्यवहार करते हैं। चूंकि एक अंतर है, आप इसे स्पष्ट कर सकते हैं और अलग-अलग अंकन के लिए जा सकते हैं। अनिवार्य कोष्ठक ज्यादातर मामलों में स्वाभाविक दिखेंगे, लेकिन जब योजना के अनुसार चीजें नहीं होती हैं तो बहुत भ्रमित होते हैं।
हेयर यू गो। अब यह दुनिया में सबसे अच्छा स्पष्टीकरण नहीं हो सकता है क्योंकि मैंने अधिकांश विवरणों को सरल किया है। इसके अलावा यह ज्यादातर डिजाइन विकल्प हैं और मैंने उन्हें जज किए बिना उनके लिए एक कारण देने की कोशिश की। मैं अमृत से प्यार करता हूं, मुझे माणिक से प्यार है, मुझे पसंद है कि फ़ंक्शन बिना कोष्ठक के कॉल करता है, लेकिन आप की तरह, मुझे एक बार में परिणाम काफी भ्रामक लगते हैं।
और अमृत में, यह सिर्फ यह अतिरिक्त डॉट है, जबकि रूबी में आपके पास इसके ऊपर ब्लॉक हैं। ब्लॉक अद्भुत हैं और मुझे आश्चर्य है कि आप सिर्फ ब्लॉकों के साथ कितना कर सकते हैं, लेकिन वे केवल तब काम करते हैं जब आपको सिर्फ एक अनाम फ़ंक्शन की आवश्यकता होती है जो अंतिम तर्क है। फिर चूंकि आपको अन्य परिदृश्यों से निपटने में सक्षम होना चाहिए, यहां पूरी विधि / लंबो / proc / ब्लॉक भ्रम की स्थिति आती है।
वैसे भी ... यह दायरे से बाहर है।