कॉफ़ीस्क्रिप्ट - एक स्व-आरंभिक अनाम फ़ंक्शन कैसे बनाएं?


जवाबों:


160

जब आप केवल कोष्ठकों का उपयोग कर सकते हैं (उदाहरण के लिए (-> foo)(), आप doकीवर्ड का उपयोग करके उनसे बच सकते हैं :

do f = -> console.log 'this runs right away'

सबसे आम उपयोग doलूप में चर को कैप्चर करना है। उदाहरण के लिए,

for x in [1..3]
  do (x) ->
    setTimeout (-> console.log x), 1

बिना do, आप सिर्फ x3 बार लूप के बाद के मूल्य को प्रिंट करेंगे ।


24
आप यह भी लिख सकते हैंf = do -> console.log x
scriu

5
@scribu खैर, वे दो बयान बहुत अलग हैं, और तुम्हारा वास्तव में वह है जो मुझे देना चाहिए था। खान समारोह -> console.log 'this runs right away'को सौंपता है f, फिर उसे चलाता है; आपका फ़ंक्शन चलता है और फिर fमूल प्रश्न के अनुसार, इसके परिणाम को असाइन करता है । (हालांकि मामले में console.log, वापसी मूल्य हमेशा undefinedवैसे भी होता है।)
ट्रेवर बर्नहम

1
बिल्कुल सही। इसके अलावा, आप इस तरह से वस्तु गुणों को परिभाषित कर सकते हैं:{f: do -> // something}
scriu

2
CoffeeScript 1.3.1 (अप्रैल 2012 को रिलीज़) के रूप में, doआपको फ़ंक्शन के लिए तर्क भी पास करने देता है। पास करने के लिए 1और 2मापदंडों के रूप में xऔर yलिखें do (x = 1, y = 2) ->। (इस फीचर के लिए दस्तावेज खो गया है , लेकिन जिस मुद्दे पर फीचर पेश किया गया था, उसके कुछ उदाहरण हैं।)
रोरी ओ'केन

19

यदि आप "उपनाम" चाहते हैं, तो कॉफीस्क्रिप्ट में स्वयं-आहरण समारोह के लिए तर्क पारित हो गए हैं, और हम कहते हैं कि आप इसे प्राप्त करने की कोशिश कर रहे हैं:

(function ( global, doc ) {
  // your code in local scope goes here
})( window, document );

तब do (window, document) ->आप ऐसा नहीं होने देंगे। जाने का रास्ता तो परेंस के साथ है:

(( global, doc ) -> 
  # your code here
)( window, document ) 

5
do (global=window, doc=document) ->
बिली मून

16

यह कॉफी में हास्यास्पद आसान है:

do ->

वापस होगा

(function() {})();

5

आप doप्रारंभिक मान के साथ कीवर्ड को पुनरावर्ती "स्व-पहल कार्यों" के लिए डिफ़ॉल्ट फ़ंक्शन मापदंडों के साथ जोड़ सकते हैं । उदाहरण:

do recursivelyPrint = (a=0) ->
  console.log a
  setTimeout (-> recursivelyPrint a + 1), 1000


3
do ->
    #your stuff here

यह एक स्व-निष्पादित समापन का निर्माण करेगा, जो स्कूपिंग के लिए उपयोगी है।


1
यह पहले से ही पोस्ट किए गए अन्य उत्तरों की तुलना में बहुत सारी नई जानकारी जोड़ने के लिए प्रतीत नहीं होता है। एक प्रतिस्पर्धी उत्तर बनाने के बजाय, आप एक अन्य उत्तर के तहत एक सूचनात्मक टिप्पणी पोस्ट करके अधिक मूल्य जोड़ सकते हैं जो दूसरे उत्तर के लिए कुछ स्पष्टता या उपयोगी जानकारी जोड़ता है।
still_dreaming_1

1

माफी, मैंने इसे हल किया:

f = (
    () -> "something"
)()

1
@ सच मैं जरूरी नहीं कहूंगा कि। doकीवर्ड कुछ सीमाएँ हैं कि यह आवश्यक कभी कभी जे एस शैली दृष्टिकोण का उपयोग करने के लिए कर दिया है (देखें मुद्दा 960 ); doवास्तव में केवल लूप के साथ क्लोजर उपयोग के मामले के कारण जोड़ा गया था।
ट्रेवर बर्नहम

1
लेकिन हम खुद को उस तरह से चेहरे पर पंच करने के लिए कॉफीस्क्रिप्ट का उपयोग नहीं कर रहे हैं।
ब्रैंडन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.