Кажется, что CoffeeScript автоматически возвращает последний элемент в области. Могу ли я избежать этой функции?
Есть ли способ не возвращать что-то с помощью CoffeeScript?
Ответ 1
Вам нужно явно не возвращать ничего или оставить выражение, оценивающее undefined в нижней части вашей функции:
fun = ->
doSomething()
return
Или:
fun = ->
doSomething()
undefined
Это то, что рекомендует doc при использовании понятий:
Будьте осторожны, чтобы вы не случайно возвращали результаты понимания в этих случаях, добавляя значение значимого возврата - как true - или null, в нижней части вашей функции.
Вы могли бы, однако, написать обертку следующим образом:
voidFun = (fun) ->
->
fun(arguments...)
return
(Обратите внимание на оператор splat здесь (...
))
И используйте это при определении функций:
fun = voidFun ->
doSomething()
doSomethingElse()
Или вот так:
fun = voidFun(->
doSomething()
doSomethingElse()
)
Ответ 2
Да, с return
в качестве последней строки функции.
Например,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Если вы хотите увидеть, что компилирует кофе js, попробуйте http://bit.ly/1enKdRl. (Я использовал сокращение coffeescript для моего примера)
Ответ 3
Просто что-то забавное (ctional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Сама Function.prototype
- это функция, которая всегда ничего не возвращает. Вы можете использовать compose для перевода вашего возвращаемого значения в эту черную дыру, а скомпилированная функция никогда ничего не вернет.
Ответ 4
longRunningFunctionWithNullReturn = ->
longRunningFunction()
null
Ответ 5
Кажется, что функции в CoffeeScript всегда должны возвращать что-то, даже null
. В C у вас есть void
как возвращаемый тип.
->
, пустая функция компилируется в (function() {})
, поэтому она единственная функция, которая ничего не возвращает.