什么时候使用包含范围与排除范围比较好?

时间:2018-11-06 03:10:30

标签: ruby range

是否有理由使用包容范围而不是互斥范围?使用这个更好吗?

for i in 1..10
    puts i
end

或者这个:

for i in 1...11
    puts i
end

还是它们只是表示完全相同的事物的两种方式?

1 个答案:

答案 0 :(得分:6)

它们不是同一件事。

(1..10).include?(10.5)
# => false
(1...11).include?(10.5)
# => true

(1..10).step(0.2).to_a
# => [1.0, 1.2, 1.4, ... 10.0]
(1...11).step(0.2).to_a
# => [1.0, 1.2, 1.4, ... 10.0, 10.2, 10.4, 10.6, 10.8] # (rounded for space)

如果您希望此操作在50%的时间内运行,则表示您犯了(非常小的)错误:

if (0..0.5).include?(rand())

等效于

if rand() <= 0.5

这些是正确的50%:

if (0...0.5).include?(rand())
if rand() < 0.5

正如卡里·斯沃夫兰(Cary Swoveland)所指出的,两点文字创建一个描述start <= x <= finish的范围,而三点文字创建一个将exclude_end设置为true的范围,该范围描述{ {1}}。