Il semble que CoffeeScript renvoie automatiquement le dernier élément d'une étendue. Puis-je éviter cette fonctionnalité?
Il semble que CoffeeScript renvoie automatiquement le dernier élément d'une étendue. Puis-je éviter cette fonctionnalité?
Réponses:
Vous devez explicitement ne rien renvoyer, ou laisser une expression évaluée à indéfinie en bas de votre fonction:
fun = ->
    doSomething()
    return
Ou:
fun = ->
    doSomething()
    undefined
C'est ce que le doc recommande, lors de l'utilisation de 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
(Remarquez l' opérateur splat ici ( ...))
Et utilisez-le comme ceci lors de la définition des fonctions:
fun = voidFun ->
    doSomething()
    doSomethingElse()
Ou comme ça:
fun = voidFun(->
    doSomething()
    doSomethingElse()
)
              return, undefinedou nullà la fin de ma fonction. Cependant, l'ajout nullme semble faux pour une raison quelconque. Ai-je raison de supposer que c'est le pire choix parmi les trois?
                    undfinedà la fin. L'utilisation d'une returninstruction vide semble n'exprimer rien de mieux que de laisser un undefinedà la fin de la fonction, donc le vide returnsemble être la meilleure option.
                    fun(arguments...), il vaudrait mieux appeler fun.apply(this, arguments).
                    Oui, avec un returncomme 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 en quoi js le café se compile, 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.prototypeelle-même est une fonction qui ne renvoie toujours rien. Vous pouvez utiliser compose pour diriger votre valeur de retour dans ce trou noir et la fonction composée ne retournera jamais rien.
Il semble que les fonctions de CoffeeScript doivent toujours renvoyer quelque chose, même null. En C, vous avez voidcomme type de retour.
->, la fonction vide, compile vers (function() {}), donc c'est la seule fonction qui ne renvoie rien.
return;fonctionne en C, JavaScript et CoffeeScript pour renvoyer une valeur void.