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

Sha*_*oon 115 coffeescript

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

Arn*_*anc 149

您必须显式返回任何内容,或者在函数底部留下一个未定义的表达式:

fun = ->
    doSomething()
    return
Run Code Online (Sandbox Code Playgroud)

要么:

fun = ->
    doSomething()
    undefined
Run Code Online (Sandbox Code Playgroud)

这是文档推荐的,当使用理解时:

在这些情况下,通过在函数的底部添加有意义的返回值(如true)或null,请注意不要意外地返回理解结果.


但是,您可以编写一个这样的包装器:

voidFun = (fun) ->
    ->
        fun(arguments...)
        return
Run Code Online (Sandbox Code Playgroud)

(注意splat运算符 here(...))

在定义函数时使用它:

fun = voidFun ->
    doSomething()
    doSomethingElse()
Run Code Online (Sandbox Code Playgroud)

或者像这样:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)
Run Code Online (Sandbox Code Playgroud)

  • 实际上,"return"和"undefined"会生成不同的javascript.在http://coffeescript.org上使用"Try Coffeescript",可以看到明确包含coffeescript中的"return"会从javascript中删除返回; 而对于"未定义",javascript函数以"return void 0;"结尾 (4认同)
  • 在javascript中,没有return语句的函数(或者一个空的return语句)返回undefined,所以最好的选择是添加一个空返回或在结尾留一个`undfined`.使用一个空的`return`语句似乎表示*返回*没有更好,在函数的末尾留下一个`undefined`,所以空`return`似乎是更好的选择. (2认同)
  • 而不是`fun(arguments ...)`,最好调用`fun.apply(this,arguments)`. (2认同)

gpr*_*ant 10

是的,使用a return作为函数的最后一行.

例如,

answer = () ->
  42

extrovert = (question) -> 
  answer()

introvert = (question) ->
  x = answer()
  # contemplate about the answer x
  return 
Run Code Online (Sandbox Code Playgroud)

如果你想看看咖啡编写的是什么,请尝试http://bit.ly/1enKdRl.(我的例子中使用过coffeescript redux)

  • 我认为它被否决了,因为除了得票最高的答案中已经存在的答案之外,这个答案没有增加任何价值,而该答案恰好是在这个答案之前两年给出的! (2认同)

min*_*des 5

只是有趣的事情(ctional)

suppressed = _.compose Function.prototype, -> 'do your stuff'
Run Code Online (Sandbox Code Playgroud)

Function.prototype本身就是一个永远不会返回的功能.您可以使用compose将返回值传递到此黑洞中,并且组合函数将永远不会返回任何内容.