似乎CoffeeScript会自动返回范围中的最后一项。我可以避免这种功能吗?
答案 0 :(得分:148)
你必须明确地不返回任何内容,或者在函数的底部留下一个未定义的表达式:
fun = ->
doSomething()
return
或者:
fun = ->
doSomething()
undefined
这是文档推荐的,当使用理解时:
请注意,在这些情况下,您不会意外地返回理解结果,添加有意义的返回值 - 如true - 或null,到函数的底部强>
但是,您可以编写一个这样的包装器:
voidFun = (fun) ->
->
fun(arguments...)
return
(请注意splat operator此处(...
))
在定义函数时使用它:
fun = voidFun ->
doSomething()
doSomethingElse()
或者像这样:
fun = voidFun(->
doSomething()
doSomethingElse()
)
答案 1 :(得分:10)
是的,return
作为函数的最后一行。
例如,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
如果您想查看咖啡的编号是什么,请尝试http://bit.ly/1enKdRl。 (我的例子中我使用过coffeescript redux)
答案 2 :(得分:5)
只是有趣(ctional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
本身就是一个总是不返回任何东西的函数。您可以使用compose将返回值传递到此黑洞中,并且组合函数将永远不会返回任何内容。
答案 3 :(得分:1)
longRunningFunctionWithNullReturn = ->
longRunningFunction()
null
答案 4 :(得分:0)
似乎CoffeeScript中的函数必须始终返回一些内容,甚至是null
。在C中,您有void
作为返回类型。
->
,空函数,编译为(function() {})
,因此它是唯一不返回任何内容的函数。