CoffeeScript中的三元操作

我需要将value设置为a,这取决于一个条件。

用CoffeeScript做这件事的最短方法是什么?

例如,这是我在JavaScript中如何做到的:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10
107450 次浏览

由于所有内容都是表达式,并因此产生值,所以可以只使用if/else

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

你可以看到更多关于表达式示例在这里

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

看到文档

几乎在任何语言中,这都是可行的:

a = true  && 5 || 10
a = false && 5 || 10

如果是真的,你也可以把它写成两种说法:

a = 5
a = 10 if false

如果你需要更多的可能性,可以使用switch语句:

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

与布尔它可能是超大的,但我发现它非常可读。

Coffeescript 不支持 javascript三元运算符。 下面是来自coffeescript作者的原因:

我喜欢三元运算符就像下一个家伙一样多(可能有点 实际上更多),但语法并不是它们的优点——它们是 很棒,因为它们可以将if/else放在一行中作为 表达式。< / p > 他们的语法只是另一种神秘的记忆魔法 语言中没有任何类似物。如果结果相等, 我宁愿if/elses总是看起来一样(并且总是如此)

所以,在CoffeeScript中,即使是多行if也会编译成三元 在适当的情况下,如果语句没有else子句:

if sunny
go_outside()
else
read_a_book().


if sunny then go_outside() else read_a_book()

都变成三元,都可以用作表达式。它是一致的,并且不需要学习新的语法。谢谢你的建议,但我要结案了

. Ticket as "wontfix"

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

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

a = if b # a depends on b
then 5   # b is true
else 10  # b is false

CoffeeScript没有三元操作符。医生是这么说的。

你仍然可以使用这样的语法

a = true then 5 else 10

这样就清楚多了。

类似于quotesBro的回答,但没有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;