Sembra che CoffeeScript restituisca automaticamente l'ultimo elemento in un ambito. Posso evitare questa funzionalità?
Sembra che CoffeeScript restituisca automaticamente l'ultimo elemento in un ambito. Posso evitare questa funzionalità?
Risposte:
Non devi restituire esplicitamente nulla o lasciare un'espressione che restituisce undefined in fondo alla tua funzione:
fun = ->
doSomething()
return
O:
fun = ->
doSomething()
undefined
Questo è ciò che consiglia il documento, quando si usano le comprensioni:
Fai attenzione a non restituire accidentalmente i risultati della comprensione in questi casi, aggiungendo un valore di ritorno significativo , come true, o null, alla fine della funzione .
Tuttavia, potresti scrivere un wrapper come questo:
voidFun = (fun) ->
->
fun(arguments...)
return
(Notare l' operatore splat qui ( ...
))
E usalo in questo modo quando definisci le funzioni:
fun = voidFun ->
doSomething()
doSomethingElse()
O in questo modo:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
o null
fino alla fine della mia funzione. Tuttavia, l'aggiunta null
mi sembra sbagliata per qualche motivo. Ho ragione a presumere che sia la scelta peggiore delle tre?
undfined
alla fine. L'uso di un'istruzione vuota return
sembra esprimere return niente di meglio che lasciare un undefined
alla fine della funzione, quindi il vuoto return
sembra essere l'opzione migliore.
fun(arguments...)
, sarebbe meglio chiamare fun.apply(this, arguments)
.
Sì, con una 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 cosa js viene compilato il caffè, prova http://bit.ly/1enKdRl . (Ho usato coffeescript redux per il mio esempio)
Solo qualcosa di divertente (ctional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
stessa è una funzione che non restituisce sempre nulla. Puoi usare compose per reindirizzare il tuo valore di ritorno in questo blackhole e la funzione composta non restituirà mai nulla.
Sembra che le funzioni in CoffeeScript debbano sempre restituire qualcosa, anche null
. In C, hai void
come tipo di ritorno.
->
, la funzione vuota, viene compilata (function() {})
, quindi è l'unica funzione che non restituisce nulla.
return;
funziona in C, JavaScript e CoffeeScript per restituire un valore void.