Похоже, 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, чтобы вернуть пустое значение.