Il semble que CoffeeScript renvoie automatiquement le dernier élément d'une étendue. Puis-je éviter cette fonctionnalité?
Vous devez explicitement ne rien retourner, ou laisser une expression évaluant indéfinie au 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:
Faites attention à ne pas retourner accidentellement les résultats de la compréhension dans ces cas, en 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 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()
)
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 vers quoi se compile le café, 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 compose pour diriger votre valeur de retour dans ce trou noir et la fonction composée ne retournera 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, se compile en (function() {})
, c'est donc la seule fonction qui ne renvoie rien.