it-swarm.it

Esiste un modo per non restituire qualcosa utilizzando CoffeeScript?

Sembra che CoffeeScript restituisca automaticamente l'ultimo elemento in un ambito. Posso evitare questa funzionalità?

115
Shamoon

Non devi restituire esplicitamente nulla o lasciare un'espressione che si valuta come indefinita nella parte inferiore della tua funzione:

fun = ->
    doSomething()
    return

O:

fun = ->
    doSomething()
    undefined

Questo è ciò che il documento raccomanda, quando si usano le comprensioni:

Fai attenzione a non restituire accidentalmente i risultati della comprensione in questi casi, aggiungendo aggiungendo un valore di ritorno significativo - come true - o null, nella parte inferiore della funzione .


Tuttavia, potresti scrivere un wrapper come questo:

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

(Nota splat operator qui (...))

E usalo in questo modo quando definisci le funzioni:

fun = voidFun ->
    doSomething()
    doSomethingElse()

O così:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)
148
Arnaud Le Blanc

Sì, con return come ultima riga di una funzione.

Per esempio,

answer = () ->
  42

extrovert = (question) -> 
  answer()

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

Se desideri vedere in che modo viene compilato il caffè, prova http://bit.ly/1enKdRl . (Ho usato il redux di coffeescript per il mio esempio)

10
gprasant

Solo qualcosa di divertente (ctional)

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

Function.prototype stessa è una funzione che non restituisce sempre nulla. È possibile utilizzare compose per reindirizzare il valore restituito in questo buco nero e la funzione composta non restituirà mai nulla.

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

Sembra che le funzioni in CoffeeScript debbano sempre restituire qualcosa, anche null. In C, hai void come tipo di ritorno. ->, la funzione vuota, compila in (function() {}), quindi è l'unica funzione che non restituisce nulla.

0
L01man