什么时候使用包容性和独家范围是好的?

Pik*_*les -2 ruby range

是否有理由使用包容范围而不是排他范围,反之亦然?使用它更好吗:

for i in 1..10
    puts i
end
Run Code Online (Sandbox Code Playgroud)

或这个:

for i in 1...11
    puts i
end
Run Code Online (Sandbox Code Playgroud)

或者他们只是两种表达完全相同的方式?

Ama*_*dan 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)
Run Code Online (Sandbox Code Playgroud)

如果你期望这个运行50%的时间,你提交一个(非常小的)错误:

if (0..0.5).include?(rand())
Run Code Online (Sandbox Code Playgroud)

这相当于

if rand() <= 0.5
Run Code Online (Sandbox Code Playgroud)

而这些是真的50%:

if (0...0.5).include?(rand())
if rand() < 0.5
Run Code Online (Sandbox Code Playgroud)

正如Cary Swoveland所说,双点文字创建了一个描述的范围start <= x <= finish,而三点文字创建了一个exclude_end设置为的范围true,其中描述了start <= x < finish.