是否有理由使用包容范围而不是排他范围,反之亦然?使用它更好吗:
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)
或者他们只是两种表达完全相同的方式?
他们不是一回事.
(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.
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |