比较Ruby中的范围

时间:2013-11-14 22:58:11

标签: ruby range

为什么这个等式返回false

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

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

5 === 5
=> true

这个等式也是真的吗?

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

我对范围缺少什么?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

Range#===文档说:

  

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

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

Range#==文档说:

  

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

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