web-dev-qa-db-fra.com

Existe-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 étendue. Puis-je éviter cette fonctionnalité?

115
Shamoon

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()
)
148
Arnaud Le Blanc

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)

10
gprasant

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.

5
ming_codes
longRunningFunctionWithNullReturn = ->
  longRunningFunction()
  null
1
yfeldblum

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.

0
L01man