Ruby Range比较是否实现不正确?

时间:2014-07-04 11:14:00

标签: ruby postgresql range

the documentation中一样,表示相同元素的两个范围被视为不同:

(1..2).to_a # => [1, 2] 
(1...3).to_a # => [1, 2] 
(1..2) == (1...3) # => false 

为什么表示相同元素的两个范围被认为是不同的?我不认为这在数学上是如何运作的。

在PostgreSQL中,它是正确实现的:

test=# select int4range(1,2, '[]') = int4range(1,3, '[)');
 ?column? 
----------
 t
(1 row)

2 个答案:

答案 0 :(得分:11)

这些范围不相等 - 请考虑使用浮点值调用include?的情况:

(1 .. 2).include? 2.5
false

(1 ... 3).include? 2.5
true

如果将它们与整数进行比较,它们发生会返回相同的结果,但这并不意味着它们相同。

答案 1 :(得分:3)

当你查看to_a的结果时,它们看起来一样。但实际上两个范围都不一样,因为它们不能覆盖相同的范围。

(1..2).cover?(2.99)
# => false

(1...3).cover?(2.99)
# => true