4

为什么这个等式返回假

(0..9) === (0..9)
=> false

虽然这个等式返回真......

5 === 5
=> true

而这个等式也是真的吗?

(0..9) == (0..9)
=> true

我对范围缺少什么?

4

2 回答 2

4

Range#===文档说:

如果 obj 是范围的元素,则返回 true,否则返回 false。方便的是,=== 是 case 语句使用的比较运算符。

范围 (0..9) 不是范围 (0..9) 的元素,这就是为什么(0..9) === (0..9)为假。

Range#==文档说:

仅当 obj 是 Range、具有等效的开始项和结束项(通过将它们与 == 进行比较)并且具有相同的 exclude_end 时才返回 true?设置为范围。

范围 (0..9) 和 (0..9) 的开始项和结束项是相同的,这就是为什么(0..9) == (0..9)为真。

于 2013-11-14T23:05:17.853 回答
4

该类Range重新定义===运算符以检查右侧的参数是否在每个http://www.ruby-doc.org/core-1.9.3/Range.html#method-i-3D-3D-3D的范围内,这就是为什么你看到你所看到的。

于 2013-11-14T23:02:36.460 回答