有没有办法不使用CoffeeScript返回一些东西?

时间:2011-09-12 17:17:31

标签: coffeescript

似乎CoffeeScript会自动返回范围中的最后一项。我可以避免这种功能吗?

5 个答案:

答案 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() {}),因此它是唯一不返回任何内容的函数。