Sembra che CoffeeScript restituisca automaticamente l'ultimo oggetto in un ambito. Posso evitare questa funzionalità?C'è un modo per non restituire qualcosa usando CoffeeScript?
risposta
si deve tornare in modo esplicito nulla, o uscire da una valutazione di espressione per non definito nella parte inferiore della vostra funzione:
fun = ->
doSomething()
return
Oppure:
fun = ->
doSomething()
undefined
Questo è ciò che il documento raccomanda, quando usando le Comprensioni:
Attenzione a non restituire accidentalmente i risultati della comprensione in In questi casi, con si aggiunge un valore di ritorno significativo - come true - o null, nella parte inferiore della propria funzione.
Si potrebbe, tuttavia, scrivere un involucro simile a questo:
voidFun = (fun) ->
->
fun(arguments...)
return
(notare la splat operator qui (...
))
e utilizzarlo come questo, quando la definizione delle funzioni:
fun = voidFun ->
doSomething()
doSomethingElse()
O come questa:
fun = voidFun(->
doSomething()
doSomethingElse()
)
Grazie per questa risposta informativa. Anch'io mi sono chiesto questo mentre sto imparando il coffeescript. Sono curioso di sapere cosa è la scelta migliore o quale sarebbe la scelta peggiore quando si impedisce il ritorno di un valore? In particolare, mi è stato detto che le opzioni sono aggiungere "return", "undefined" o "null" alla fine della mia funzione. Tuttavia, aggiungere "null" mi sembra sbagliato per qualche motivo. Ho ragione di ritenerlo la peggiore scelta tra le tre? – stefmikhail
In javascript una funzione senza istruzione return (o un'istruzione return vuota) restituisce undefined, quindi l'opzione migliore è quella di aggiungere un return vuoto o lasciare un 'undfined' alla fine. L'uso di un'istruzione vuota 'return' sembra esprimere * return nothing * meglio che lasciare un' indefinito' alla fine della funzione, quindi il 'return' vuoto sembra essere l'opzione migliore. – arnaud576875
Invece di 'fun (argomenti ...)', sarebbe meglio chiamare 'fun.apply (this, arguments)'. –
longRunningFunctionWithNullReturn = ->
longRunningFunction()
null
Sembra funzioni CoffeeScript devono sempre restituire qualcosa, anche null
. In C, hai void
come tipo di ritorno. ->
, la funzione vuota, compila a (function() {})
, quindi è l'unica funzione che non restituisce nulla.
Non è vero. 'return;' funziona in C, JavaScript e CoffeeScript per restituire un valore void. – YoYoYonnY
solo qualcosa di divertente (finzionale)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
è di per sé una funzione che restituisce sempre nulla. Puoi usare compose per convogliare il tuo valore di ritorno in questo blackhole e la funzione composta non restituirà mai nulla.
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 vuoi vedere che cosa js il caffè compila a, provare http://bit.ly/1enKdRl. (Ho usato redux coffeescript per il mio esempio)
downvoter, commento per favore! – gprasant
Penso che sia stato downvoted perché questa risposta non aggiunge alcun valore oltre a quello già presente nella risposta top-votata, che viene data anche 2 anni prima di questa! –
Ma l'esempio è così bello. –
- 1. Modo standard di sviluppo di un modulo nodo usando Coffeescript?
- 2. Come restituire oggetto esplicitamente CoffeeScript
- 3. Node.js: crea un progetto Express usando CoffeeScript
- 4. ruby block e restituire qualcosa dal blocco
- 5. Esiste un modo idiomatico per testare l'uguaglianza dell'array in Coffeescript?
- 6. C'è un modo per filtrare un campo che non contiene qualcosa in un dataframe di scintilla usando scala?
- 7. Un'attività di gulp deve restituire qualcosa?
- 8. Come posso restituire qualcosa in anticipo da un blocco?
- 9. C'è un modo per ottenere YQL per restituire HTML?
- 10. modo pythonic per verificare se qualcosa esiste?
- 11. C'è un modo per fare qualcosa di simile in C#?
- 12. Esiste un modo per non restituire la colonna `by` come prima colonna in un raggruppamento data.table
- 13. Adattamento di un coffeescript per utilizzare window.onload
- 14. Perché CoffeeScript compila un ciclo for in questo modo?
- 15. C'è un modo per restituire il tipo Anonymous dal metodo?
- 16. Esistono abbellimenti per CoffeeScript?
- 17. Editore CoffeeScript per MacOS
- 18. Coffeescript. per/in loop
- 19. C'è un modo per restituire più risultati con una sottoquery?
- 20. Il modo migliore per restituire un valore booleano casuale
- 21. C'è un modo migliore per aggregare un dizionario usando LINQ?
- 22. Posso forzare un metodo di una classe astratta per restituire qualcosa?
- 23. il momento giusto per usare CoffeeScript
- 24. controllo coffeescript se non in array
- 25. async .NET/attendere: in questo caso dovrei restituire qualcosa?
- 26. C'è qualcosa di sbagliato nel modo in cui sto usando un lungo doppio?
- 27. C'è un modo per deridere parzialmente un oggetto usando EasyMock?
- 28. interrogativo sintassi da CoffeeScript senza CoffeeScript
- 29. Modalità Coffeescript per la console dei nodi?
- 30. Trovare un intervallo in CoffeeScript
Perché vuoi? Non puoi semplicemente scartare il valore restituito quando vuoi? – Chris
@Chris: Quando non c'è un valore di ritorno significativo, la perdita di ciò che accade è il risultato dell'ultima istruzione non è una buona idea. – delnan
@Chris questo può avere implicazioni sulle prestazioni con le stringhe di comprensione/per/while, poiché coffeescript può raccogliere il risultato di ogni iterazione in un array, se viene utilizzato il valore di ritorno del ciclo (o se è l'ultima espressione di una funzione) – arnaud576875