0

今天做了一个小测试:

> false && 1 || 2
> 2
> true && 1 || 2
> 1

因此,如果我们已经可以使用二元运算符,为什么还需要三元呢?

> false ? 1 : 2
> 2
> true ? 1 : 2
> 1

因为它不仅仅是一个别名并且使解析复杂化。

4

3 回答 3

3

处理您问题中的具体案例……</p>

如果1是不同的值,一个被评估为假的值怎么办?

一般来说:

不,您始终可以用if/else构造替换三元运算符。不过那样不太方便。

于 2013-02-21T13:39:04.580 回答
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 是一门面向对象的语言,所有的条件都是不必要的。您可以只使用多态性。

于 2013-02-21T13:53:53.107 回答
1

没有语言需要三元运算符。

三元运算符是一种众所周知的语言结构。IMO 人们通常期望它使用类似脚本(外观)的语言,所以它就是这样。我看不出有什么理由拥有它。

于 2013-02-21T13:37:06.327 回答