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