今天做了一个小测试:
> false && 1 || 2
> 2
> true && 1 || 2
> 1
因此,如果我们已经可以使用二元运算符,为什么还需要三元呢?
> false ? 1 : 2
> 2
> true ? 1 : 2
> 1
因为它不仅仅是一个别名并且使解析复杂化。
今天做了一个小测试:
> false && 1 || 2
> 2
> true && 1 || 2
> 1
因此,如果我们已经可以使用二元运算符,为什么还需要三元呢?
> false ? 1 : 2
> 2
> true ? 1 : 2
> 1
因为它不仅仅是一个别名并且使解析复杂化。
处理您问题中的具体案例……</p>
如果1
是不同的值,一个被评估为假的值怎么办?
一般来说:
不,您始终可以用if/else
构造替换三元运算符。不过那样不太方便。
在 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 是一门面向对象的语言,所有的条件都是不必要的。您可以只使用多态性。
没有语言需要三元运算符。
三元运算符是一种众所周知的语言结构。IMO 人们通常期望它使用类似脚本(外观)的语言,所以它就是这样。我看不出有什么理由不拥有它。