有没有办法不使用CoffeeScript返回任何内容?


116

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


你为什么要 您是否可以随意丢弃返回的值?
克里斯(Chris

11
@Chris:当没有有意义的返回值时,泄漏上一个语句的结果碰巧不是一个好主意。

11
@Chris这也可能会影响/ for / while循环的性能,因为coffeescript可能会收集数组中每次迭代的结果,如果使用了循环的返回值(或者它是函数的最后一个表达式)
Arnaud Le Blanc

1
我刚和建筑工人有这个问题。我在构造函数的最后一行定义了一个函数。因此,这被返回,而不是我的“类功能”。我必须明确地返回这个。只是说,这可能是一个问题。
马库斯2014年

Answers:


150

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

fun = ->
    doSomething()
    return

要么:

fun = ->
    doSomething()
    undefined

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

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


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

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

(请在此处通知splat运算符...

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

fun = voidFun ->
    doSomething()
    doSomethingElse()

或像这样:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)

感谢您提供的翔实答案。我现在正在学习咖啡脚本时,我也一直对此感到疑惑。我很好奇您是否可以在防止返回值时找到最佳选择,或者最差选择呢?具体而言,我已被告知选项添加要么returnundefinednull到我的函数结束。但是,null由于某种原因,添加对我来说似乎是错误的。我是否可以假设这是三个选项中最差的选择?
stefmikhail 2012年

2
在javascript中,没有return语句(或空return语句)的函数将返回undefined,因此最好的选择是添加一个空return或undfined在末尾留下一个。使用空return语句似乎比在函数末尾留下一个更好的表达returnundefined,因此,空return似乎是更好的选择。
Arnaud Le Blanc

2
相反fun(arguments...),最好打电话fun.apply(this, arguments)
米格尔·马德罗

4
实际上,“ return”和“ undefined”会生成不同的javascript。用“尝试的CoffeeScript”在coffeescript.org,人们可以看到,明确包括在CoffeeScript中去除的JavaScript回归“回归”; 而以“ undefined”表示,javascript函数以“ return void 0;”结尾。
丹尼尔(Daniel)

1
我认为您可能需要对voidFun保持谨慎,因为我怀疑内部函数仍然会返回它想要的任何内容,这可能会导致性能下降。
AturSams 2014年

10

是的,以a return作为函数的最后一行。

例如,

answer = () ->
  42

extrovert = (question) -> 
  answer()

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

如果您想查看咖啡编译成的js,请尝试http://bit.ly/1enKdRl。(我在示例中使用coffeescript redux)


1
我认为它被否决了,因为除了最受好评的答案中已经存在的答案之外,此答案没有任何附加值,而该答案恰好在此答案之前的两年给出!
kumarharsh

5

只是好玩的东西(标准)

suppressed = _.compose Function.prototype, -> 'do your stuff'

Function.prototype本身是一个始终不返回任何内容的函数。您可以使用compose将返回值通过管道传递到该黑洞中,并且composite函数将永远不会返回任何内容。



-1

看来CoffeeScript中的函数必须始终返回某些内容,甚至null。在C中,您有void一个返回类型。 ->,空函数会编译为(function() {}),因此它是唯一不返回任何内容的函数。


这不是真的。return;可在C,JavaScript和CoffeeScript中使用,以返回空值。
yyny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.