CoffeeScript中的三元操作

我需要设定一个值,取决于一个条件。

用CoffeeScript做这个最简单的方法是什么?

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

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

由于一切都是一个expression式,因此产生一个值,你可以使用if/else

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

你可以在这里看到更多关于expression式的例子

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

见文件 。

几乎所有的语言都应该这样做:

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

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

我喜欢三元运算符,就像下一个人一样多(实际上可能多一点),但是语法并不是什么使得它们好 – 它们是好的,因为它们可以作为一个ifexpression。

他们的语法只是另一个难以理解的神奇魔法,与语言中的其他任何东西都不相似。 结果是平等的,我宁愿有if/elses总是看起来相同(总是编译成expression式)。

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

 if sunny go_outside() else read_a_book(). if sunny then go_outside() else read_a_book() 

两者都成为三元,都可以作为expression。 这是一致的,没有新的语法学习。 所以,谢谢你的build议,但是我把这张票closures为“wontfix”。

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

如果大部分都是真的,你也可以用两个语句来写:

 a = 5 a = 10 if false 

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

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

用布尔值可能会过大,但我觉得它非常可读。

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

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