我今天做了一个小测试:
> false && 1 || 2
> 2
> true && 1 || 2
> 1
因此,如果我们已经可以使用二元运算符,为什么我们需要三元运算符?
> false ? 1 : 2
> 2
> true ? 1 : 2
> 1
因为它不仅仅是别名并且使解析变得复杂。
答案 0 :(得分:3)
处理你问题中的具体案例......
如果1
是不同的值,那么评估为false的怎么办?
总的来说:
没有。您始终可以使用if/else
构造替换三元运算符。但这并不方便。
答案 1 :(得分:1)
没有语言需要三元运算符。
三元运算符是众所周知的语言结构。国际文凭组织的人们通常期望它采用脚本式(看起来)语言,所以就是这样。我没有看到不拥有它的巨大理由。
答案 2 :(得分:1)
C语言需要条件运算符,因为if
/ else
是语句,它不会计算为返回值。但在Ruby中,所有都是一个表达式,所有都有一个返回值,没有语句。
因此,您可以始终用条件表达式替换条件运算符:
foo = bar ? baz : qux
完全等同于
foo = if bar then baz else qux end
在C中,你不能写这个,你必须写
if bar then foo = baz else foo = aux end
导致代码重复。这就是你在C中需要条件运算符的原因。在Ruby中,它是不必要的。
实际上,由于Ruby是面向对象的语言,因此不需要所有条件。你可以改用多态。