与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)
答案 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