调用一个函数并显式返回一行?

时间:2014-03-13 04:08:22

标签: coffeescript

是否可以调用函数并返回同一行:

foo() and return if conditon == true

而不是拆分成多行?我尝试使用return突出显示以下错误:

error: cannot use a pure statement in an expression

1 个答案:

答案 0 :(得分:2)

return不是CoffeeScript中的表达式,and的格式为:

  

expr and expr

由于return不是表达式,因此如果没有看到您所看到的错误,就无法说出expr and return

有多种方法可以解决这个问题,您选择哪一种方法取决于您期望foo()返回的内容以及您希望函数返回的内容。

如果你不关心你的回归,那就直接去做吧:

return foo() if(condition)

请记住,returnreturn undefined是相同的。

如果foo()返回真值,那么您可以使用&&(或and):

return foo() && undefined if(condition)

如果foo()返回falsey值,请切换为||(或or):

return foo() || undefined if(condition)

如果您不知道foo()会返回什么(如果有的话),那么事情会变得很难看。如果CoffeeScript有comma operator like JavaScript does

  

逗号运算符计算它的两个操作数(从左到右)并返回第二个操作数的值。

然后你可以说:

return foo(), undefined if(condition)

这不起作用,因为CoffeeScript没有逗号运算符。但是,您可以使用额外的功能来模拟它:

comma = (a, b) -> b
#...
return comma(foo(), undefined) if(condition)

或使用do的SIF版本:

return (do -> foo(); return) if(condition)

或者您可以使用反引号在CoffeeScript中嵌入原始JavaScript:

return `foo(), undefined` if(condition)

或者您可以结合使用&&||技术:

return (foo() || undefined) && undefined if(condition)

演示:http://jsfiddle.net/ambiguous/UQc7g/


我倾向于return foo() if(condition)这么有限的信息。