有没有办法不使用CoffeeScript返回某些内容?

有没有办法不使用CoffeeScript返回某些内容?,coffeescript,Coffeescript,似乎CoffeeScript会自动返回作用域中的最后一项。我可以避免使用此功能吗?您必须显式地不返回任何内容,或者在函数底部保留一个计算为未定义的表达式: fun = -> doSomething() return 或: 这是doc在使用理解时的建议: 在这些情况下,请小心不要意外返回理解结果,方法是在函数底部添加有意义的返回值,如true或null 但是,您可以编写如下包装: voidFun = (fun) -> -> fun(ar

似乎CoffeeScript会自动返回作用域中的最后一项。我可以避免使用此功能吗?

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

fun = ->
    doSomething()
    return
或:

这是doc在使用理解时的建议:

在这些情况下,请小心不要意外返回理解结果,方法是在函数底部添加有意义的返回值,如true或null


但是,您可以编写如下包装:

voidFun = (fun) ->
    ->
        fun(arguments...)
        return
fun = voidFun(->
    doSomething()
    doSomethingElse()
)
(请注意此处(
))

并在定义函数时这样使用它:

fun = voidFun ->
    doSomething()
    doSomethingElse()
或者像这样:

voidFun = (fun) ->
    ->
        fun(arguments...)
        return
fun = voidFun(->
    doSomething()
    doSomethingElse()
)

似乎CoffeeScript中的函数必须始终返回某些内容,即使
null
。在C语言中,返回类型为
void
。 空函数编译为
(function(){})
,因此它是唯一一个不返回任何内容的函数。

只是一些有趣的东西(函数)


Function.prototype
本身就是一个始终不返回任何内容的函数。您可以使用compose将返回值导入这个黑洞,而composed函数将永远不会返回任何内容。

是,函数的最后一行是
返回值

比如说,

answer = () ->
  42

extrovert = (question) -> 
  answer()

introvert = (question) ->
  x = answer()
  # contemplate about the answer x
  return 

如果您想查看咖啡编译成什么js,请尝试。(我以coffeescript redux为例)

为什么要这样做?你不能随意丢弃返回值吗?@Chris:当没有有意义的返回值时,泄漏上一条语句的结果不是一个好主意。@Chris这也可能对理解/for/while循环产生性能影响,因为coffeescript可能会收集数组中每次迭代的结果,如果使用循环的返回值(或者如果它是函数的最后一个表达式),我就遇到了一个构造函数的问题。我在构造函数的最后一行定义了一个函数。所以这是返回的,而不是我的“类函数”。我必须明确地返回这个。只是说,这可能是一个问题。谢谢你提供了这个信息丰富的答案。我也一直在想这个问题,因为我现在正在学习咖啡脚本。我很好奇,如果你能告诉我什么是最好的选择,或者什么是最坏的选择,当阻止返回一个值?具体地说,我被告知选项是将
return
undefined
null
添加到我的函数末尾。然而,由于某些原因,添加
null
对我来说似乎是错误的。在javascript中,没有返回语句(或空返回语句)的函数返回未定义的结果,因此最好的选择是添加一个空返回或在末尾保留一个未定义的
undefined
。使用空的
return
语句似乎比在函数末尾保留一个未定义的
语句更好地表达return,因此空的
return
似乎是更好的选择。与其调用
fun(arguments…
,不如调用
fun.apply(这是参数)
。实际上,“return”和“undefined”生成不同的javascript。使用处的“Try Coffeescript”,可以看到在Coffeescript中显式地包含“return”会删除javascript中的返回;而使用“undefined”,javascript函数以“return void 0;“我认为您可能需要小心使用voidFun,因为我怀疑内部函数仍然会返回它想要的任何东西,这可能会导致性能下降。我认为它被否决了,因为这个答案没有增加任何价值,除了排名靠前的答案中已经存在的一个,也恰好被给予2年的时间在此之前!这不是真的。
return;
在C、JavaScript和CoffeeScript中工作以返回一个空值。
answer = () ->
  42

extrovert = (question) -> 
  answer()

introvert = (question) ->
  x = answer()
  # contemplate about the answer x
  return