a...b
исключает конечное значение, тогда как a..b
включает конечное значение.
При работе с целыми числами a...b
ведет себя как a..b-1
.
>> (-1...3).to_a
=> [-1, 0, 1, 2]
>> (-1..2).to_a
=> [-1, 0, 1, 2]
>> (-1..2).to_a == (-1...3).to_a
=> true
Но на самом деле диапазоны отличаются в строке действительных чисел .
>> (-1..2) == (-1...3)
=> false
Это можно увидеть при увеличении дробными шагами.
>> (-1..2).step(0.5).to_a
=> [-1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0]
>> (-1...3).step(0.5).to_a
=> [-1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5]