2012-01-26 10 views

उत्तर

6

इसका कारण यह है कि फ़ंक्शन कॉल (आमंत्रण) के लिए कोष्ठक वैकल्पिक हैं। मुझे यह अपने स्वयं के कोड में निरंतर भ्रम लगता है और इसे स्पष्ट करने के लिए हमेशा कोष्ठक समेत एक सामान्य नीति है।

कॉफी स्क्रिप्ट में, यदि आप कोष्ठक छोड़ देते हैं तो यह मानता है कि तर्क सूची लाइन के अंत तक जाती है। आपका पहला उदाहरण कॉफी स्क्रिप्ट वास्तव में इस रूप में ही है:

nums = [1..10].map((i) -> i*2) 

जहां कॉल को मैप करने के पहले तर्क एक समारोह (i)->i*2

आप नक्शे और (मैं) के बीच की जगह को निकाल देते हैं तो कॉफी स्क्रिप्ट शेष रेखा के चारों ओर कोष्ठक का तात्पर्य है। आपकी दूसरी उदाहरण कॉफी स्क्रिप्ट वास्तव में इस रूप में ही है:

nums = [1..10].map(i)(-> i*2) 
यहाँ आप देख सकते हैं कि नक्शा केवल तर्क के रूप में i साथ बुलाया जा रहा है और फिर कॉफी स्क्रिप्ट map(i) कॉल की उम्मीद है एक समारोह जो फिर वापस जाने के लिए

->i*2 पास करने या ()->i*2 को तर्क के रूप में अधिक स्पष्ट होने के लिए कहा जा रहा है।

यह देखते हुए कि कॉफी स्क्रिप्ट जावास्क्रिप्ट के संभावित कोडिंग खतरों को दूर करने के लिए डिज़ाइन की गई है, मुझे लगता है कि अगर यह इस अंतर्निहित कोष्ठक को शामिल नहीं किया गया तो यह अधिक सुरक्षित होता।

4

map(i) दूसरा एक में टूट गया है एक समारोह कॉल के रूप में व्याख्या की है। जावास्क्रिप्ट इस तरह बाहर आता है:

var nums; 

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(i)(function() { 
    return i * 2; 
}); 

और है कि किसी भी मतलब नहीं है क्योंकि map एक समारोह वापस नहीं करता है और वहाँ कोई i परिभाषित किया गया है।

पहले में, स्थान इसे [1..10].map((i) -> i*2) में बदल देता है ताकि आप एक कार्य के साथ map पर कॉल कर सकें; इस मामले में जावास्क्रिप्ट इस तरह दिखता है:

var nums; 

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(function(i) { 
    return i * 2; 
}); 
+0

मुझे कॉफीस्क्रिप्ट पसंद है। मुझे गलत मत समझो ... लेकिन इस प्रकार का व्हाइटस्पेस मुद्दा मुझे परेशान करता है। एक पठनीयता परिप्रेक्ष्य से, ऐसा लगता है कि इससे कोई फर्क नहीं पड़ता ... लेकिन यह करता है। यही कारण है कि जब भी मैं इस कथित अस्पष्टता के साथ आता हूं, तो मैं अक्सर इसे हटा देता हूं और लिखता हूं: 'नक्शा ((i) -> i * 2)' ताकि गलती से गलती से व्याख्या नहीं की जा सके। –

+1

मैं ब्रायन से एक और आगे जाऊंगा, इस तरह की चीजों से बचने के लिए मेरी टीम और मैंने फ़ंक्शन कॉल के लिए माता-पिता को छोड़ने की कॉफीस्क्रिप्ट की क्षमता का उपयोग करने का निर्णय नहीं लिया है। मैं माता-पिता को 'अगर' खंडों और अन्य स्थानों में छोड़ देता हूं जहां जावास्क्रिप्ट को माता-पिता में लपेटने की भविष्यवाणी की आवश्यकता होती है। लेकिन मैं उन्हें सभी फ़ंक्शन कॉल के लिए उपयोग करता हूं। मैं '->' 'के बजाय'() -> लिखता हूं। आपके उदाहरण के लिए, मैं इसे ब्रायन की तरह लिखूंगा, '... नक्शा ((i) -> i * 2) '; मेरी राय में बहुत अधिक पठनीय। –

+1

मैं उन आंतरिक रिक्त स्थानों के बारे में आश्वस्त नहीं हूं, व्यक्तिगत रूप से मैं लिखूंगा: 'xs.map ((x) -> x * 2) '।अन्यथा मैं आप दोनों से सहमत हूं, डीएसएल-स्टाइल कोड लिखते समय ब्रांड्स-कम शैली शांत दिखती है, लेकिन जब "सामान्य" कोड लिखते समय आपको समस्याएं होती हैं (उदाहरण के लिए रूबी में भी होता है)। पेरेंटहेन्स का उपयोग करने का एक और फायदा है: आप समेकित रूबी-स्टाइल मल्टी-लाइन ब्लॉक लिख सकते हैं जो बहुत अच्छी लगती हैं ('' का उपयोग करके '' क्योंकि 'अंत' थी)। – tokland

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