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