是否有理由使用包容范围而不是互斥范围?使用这个更好吗?
for i in 1..10
puts i
end
或者这个:
for i in 1...11
puts i
end
还是它们只是表示完全相同的事物的两种方式?
答案 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}}。