Parece que CoffeeScript devuelve automáticamente el último elemento en un ámbito. ¿Puedo evitar esta funcionalidad?¿Hay alguna forma de no devolver algo con CoffeeScript?
Respuesta
tiene que devolver explícitamente nada, o para dejar una expresión evaluar a indefinido en la parte inferior de su función:
fun = ->
doSomething()
return
O:
fun = ->
doSomething()
undefined
Esto es lo que recomienda el doctor, cuando utilizando las comprensiones:
Tenga cuidado de no devolver accidentalmente los resultados de la comprensión en estos casos, por añadiendo un valor significativo retorno - como verdad - o nula, a la parte inferior de su función.
Se podría, sin embargo, escribir un envoltorio de la siguiente manera:
voidFun = (fun) ->
->
fun(arguments...)
return
(Note la splat operator aquí (...
))
y utilizarlo como éste en la definición de funciones:
fun = voidFun ->
doSomething()
doSomethingElse()
O así:
fun = voidFun(->
doSomething()
doSomethingElse()
)
Gracias por esta respuesta informativa. Yo también me he estado preguntando sobre esto ya que actualmente estoy aprendiendo coffeescript. Tengo curiosidad si puede arrojar algo de luz sobre cuál es la mejor opción, o cuál sería la peor opción al evitar el retorno de un valor. Específicamente, me han dicho que las opciones son agregar 'return',' undefined', o 'null' al final de mi función. Sin embargo, agregar 'null' me parece incorrecto por alguna razón. ¿Tengo razón en suponer que es la peor opción de las tres? – stefmikhail
En javascript, una función sin declaración de devolución (o una declaración de devolución vacía) devuelve indefinido, por lo que la mejor opción es agregar una declaración vacía o dejar una 'sin definir' al final. El uso de una declaración 'return' vacía parece expresar * return nothing * better that dejando un' undefined' al final de la función, por lo que el 'return' vacío parece ser la mejor opción. – arnaud576875
En lugar de 'fun (arguments ...)', sería mejor llamar a 'fun.apply (this, arguments)'. –
longRunningFunctionWithNullReturn = ->
longRunningFunction()
null
Parece funciones en CoffeeScript siempre debe devolver algo, aunque null
. En C, tiene void
como tipo de devolución. ->
, la función de vacío, compila a (function() {})
, así que es la única función que no devuelve nada.
Eso no es verdad. 'return;' funciona en C, JavaScript y CoffeeScript para devolver un valor nulo. – YoYoYonnY
Sólo algo divertido (ficticia)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
en sí es una función que siempre devuelven nada. Puede usar componer para canalizar su valor de retorno en este agujero negro y la función compuesta nunca devolverá nada.
Sí, con un return
como la última línea de una función.
Por ejemplo,
answer =() ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Si desea ver qué js el café compila a, tratar http://bit.ly/1enKdRl. (He usado redux CoffeeScript para mi ejemplo)
downvoter, ¡comenten por favor! – gprasant
Creo que fue downvoted porque esta respuesta no agrega ningún valor aparte de la que ya está allí en la respuesta más votado, que también se da 2 años antes de este! –
Pero el ejemplo es genial. –
- 1. ¿Hay alguna forma de devolver resultados múltiples con una subconsulta?
- 2. ¿Hay alguna forma de devolver el tipo anónimo del método?
- 3. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 4. ¿Hay alguna forma de sobrecargar + = en python?
- 5. la forma de ejecutar algo si ocurre alguna excepción
- 6. ¿Hay alguna forma de devolver otros datos dentro de javascript treemap json?
- 7. ¿Hay alguna forma mejor de escribir esto?
- 8. Cómo devolver objeto explícitamente en CoffeeScript
- 9. ¿Hay alguna forma de cancelar TabControl.Items.CurrentChanging?
- 10. ¿Hay algún embellecedor CoffeeScript?
- 11. ¿Hay alguna forma de sincronizar archivos gif?
- 12. ¿Hay alguna forma de que jadclipse funcione con Eclipse 3.4?
- 13. ¿Hay alguna forma de comunicarse con dispositivos USB en Android?
- 14. ¿Hay alguna (algo) avanzada biblioteca de matemáticas de Javascript?
- 15. ¿Hay alguna forma de currying en C?
- 16. ¿Hay alguna forma de usar TransactionScope con una conexión existente?
- 17. ¿Hay alguna forma de desinstalar varios paquetes con pip?
- 18. ¿Hay alguna forma de hacer un PUT con WebClient?
- 19. ¿Hay alguna forma de integrar Mylyn con Bitbucket?
- 20. ¿Hay alguna forma de almacenar fechas en árabe con Postgres?
- 21. ¿Hay alguna forma de vincular Keyboard.FocusedElement?
- 22. ¿Hay alguna forma de especificar un tipo enumerable vacío anónimo?
- 23. ¿Hay alguna forma de 'resaltar' el código?
- 24. ¿Hay alguna forma de pasar el iPhone?
- 25. ¿Hay alguna desventaja al devolver esto en lugar de anular?
- 26. ¿Integrando CoffeeScript con Eclipse?
- 27. ¿Hay algo que no pueda hacer con el bigote?
- 28. ¿Hay alguna manera de hacer algo como esto en C#?
- 29. ¿Hay alguna forma de combinar con cualquier carácter Unicode no alfabético?
- 30. ¿Hay alguna razón para bloquear algo diferente a new object()?
¿Por qué quieres? ¿No puedes descartar el valor devuelto cuando quieras? – Chris
@Chris: cuando no hay un valor de retorno significativo, filtrar lo que sea el resultado de la última declaración no es una buena idea. – delnan
@Chris esto puede tener implicaciones de rendimiento con las comprensiones/para/while loops también, ya que coffeescript puede recoger el resultado de cada iteración en una matriz, si se usa el valor de retorno del ciclo (o si es la última expresión de una función) – arnaud576875