Y a-t-il un moyen de ne pas retourner quelque chose en utilisant CoffeeScript?

Il semble que CoffeeScript renvoie automatiquement le dernier élément d’une scope. Puis-je éviter cette fonctionnalité?

Vous ne devez rien renvoyer explicitement, ou laisser une expression se référant à undefined en bas de votre fonction:

fun = -> doSomething() return 

Ou:

 fun = -> doSomething() undefined 

C’est ce que le doc recommande, en utilisant des compréhensions:

Veillez à ne pas renvoyer accidentellement les résultats de la compréhension dans ces cas, en ajoutant une valeur de retour significative – comme true – ou null, au bas de votre fonction .


Vous pouvez cependant écrire un wrapper comme celui-ci:

 voidFun = (fun) -> -> fun(arguments...) return 

(Notez l’ opérateur splat ici ( ... ))

Et l’utiliser comme ça lors de la définition des fonctions:

 fun = voidFun -> doSomething() doSomethingElse() 

Ou comme ça:

 fun = voidFun(-> doSomething() doSomethingElse() ) 

Oui, avec un return comme dernière ligne d’une fonction.

Par exemple,

 answer = () -> 42 extrovert = (question) -> answer() introvert = (question) -> x = answer() # contemplate about the answer x return 

Si vous souhaitez voir à quoi le café est compilé, essayez http://bit.ly/1enKdRl . (J’ai utilisé coffeescript redux pour mon exemple)

Juste quelque chose d’amusant (ctional)

 suppressed = _.compose Function.prototype, -> 'do your stuff' 

Function.prototype lui-même est une fonction qui ne renvoie toujours rien. Vous pouvez utiliser compos pour diriger votre valeur de retour dans ce trou noir et la fonction composée ne renverra jamais rien.

 longRunningFunctionWithNullReturn = -> longRunningFunction() null 

Il semble que les fonctions de CoffeeScript doivent toujours renvoyer quelque chose, même null . En C, vous avez void comme type de retour. -> , la fonction vide, comstack en (function() {}) , c’est donc la seule fonction qui ne retourne rien.