Есть ли способ не возвращать что-то с помощью 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() {}), поэтому она единственная функция, которая ничего не возвращает.