web-dev-qa-db-fra.com

Coffeescript --- Comment créer une fonction anonyme auto-initiante?

Comment écrire cela dans coffeescript?

f = (function(){
   // something
})();

Merci pour tous les conseils :)

86
user537339

Bien que vous puissiez simplement utiliser des parenthèses (par exemple, (-> foo)(), vous pouvez les éviter en utilisant le mot clé do:

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

L'utilisation la plus courante de do est la capture de variables dans une boucle. Par exemple,

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

Sans la do, vous imprimeriez simplement la valeur de x après la boucle 3 fois.

160
Trevor Burnham

Si vous voulez "aliaser" les arguments passés à la fonction d'auto-invocation dans CoffeeScript, et disons que c'est ce que vous essayez d'atteindre:

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

Alors, do (window, document) -> ne vous laissera pas faire cela. Le chemin à parcourir est avec parens alors:

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

c'est ridicule facile dans le café:

do ->

reviendra 

(function() {})();
15
mart7ini

Vous pouvez également combiner le mot clé do avec les paramètres de fonction par défaut pour créer des "fonctions auto-initiantes" récursives avec une valeur initiale. Exemple:

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

essayez d'utiliser 

do ($ = jQuery) ->
5
Pavel Blagodov
do ->
    #your stuff here

Cela créera une fermeture à exécution automatique, ce qui est utile pour la portée.

3
Jordan Checkman

Toutes mes excuses, je l'ai résolu:

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

CA devrait etre 

f = () ->
  # do something
0