331

我需要根据a条件设置值。

使用 CoffeeScript 执行此操作的最短方法是什么?

例如,这就是我在 JavaScript 中的做法:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10
4

8 回答 8

559

由于一切都是表达式,因此会产生一个值,因此您可以使用if/else.

a = if true then 5 else 10
a = if false then 5 else 10

您可以在此处查看有关表达式示例的更多信息。

于 2012-04-13T18:14:05.740 回答
69
a = if true then 5 else 10
a = if false then 5 else 10 

请参阅文档

于 2012-04-13T18:15:48.143 回答
23

在几乎任何语言中,这都应该起作用:

a = true  && 5 || 10
a = false && 5 || 10
于 2013-03-27T15:27:44.080 回答
16

Coffeescript不支持javascript 三元运算符。这是咖啡脚本作者的原因:

我和下一个家伙一样喜欢三元运算符(实际上可能更多一点),但语法并不是让它们变得好的原因——它们很棒,因为它们可以将 if/else 放在一行中作为表达。

它们的语法只是另一种难以记忆的神秘魔法,与该语言中的其他任何东西都没有相似之处。结果是相等的,我宁愿if/elses看起来总是一样的(并且总是被编译成一个表达式)。

因此,在 CoffeeScript 中,即使是多行 if 也会在适当的时候编译成三元组,就像没有 else 子句的 if 语句一样:

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

两者都成为三元组,都可以用作表达式。它是一致的,不需要学习新的语法。所以,感谢您的建议,但我将这张票关闭为“wontfix”。

请参考github问题:https ://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

于 2016-08-23T05:34:50.083 回答
4

如果它主要是真正的用途,您也可以将它写在两个语句中:

a = 5
a = 10 if false

如果您需要更多可能性,或者使用 switch 语句:

a = switch x
  when true then 5
  when false then 10

使用布尔值可能会过大,但我发现它非常易读。

于 2015-08-02T19:57:30.227 回答
2

多行版本(例如,如果您需要在每行之后添加注释):

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false
于 2017-09-18T07:29:15.087 回答
0

CoffeeScript没有三元运算符。这就是文档所说的。

您仍然可以使用类似的语法

a = true then 5 else 10

就清楚多了。

于 2018-08-13T16:21:34.750 回答
0

类似于 quoteBro 的answer,但没有then关键字。这是一个使用普通的多行 if 语句的版本。对我来说,这个格式很好。

考虑这个正常的 if 语句

if true
    # do stuff
else
    # do stuff

然后将其用于赋值(同样,没有then关键字)

value = if true
    5
else
    10

value = if false
    5
else
    10

这编译为 javascript 就像一个普通的三元

value = true ? 5 : 10;
value = false ? 5 : 10;
于 2021-08-26T17:12:29.710 回答