当使用红宝石Range对象三联点符号,我得到这样的:
(0...5).each{|n| p n}
0
1
2
3
4
当我使用“最后”的方法获得:
(0...5).last
=> 5
我本来期望4
这是一个错误吗? 或者是有什么我不明白有关Range对象的概念?
当使用红宝石Range对象三联点符号,我得到这样的:
(0...5).each{|n| p n}
0
1
2
3
4
当我使用“最后”的方法获得:
(0...5).last
=> 5
我本来期望4
这是一个错误吗? 或者是有什么我不明白有关Range对象的概念?
这是由设计。 红宝石2.0文档是更具体的 :
需要注意的是不带参数的
last
将返回定义的范围内,即使年底对象exclude_end?
是true
。(10..20).last #=> 20 (10...20).last #=> 20 (10..20).last(3) #=> [18, 19, 20] (10...20).last(3) #=> [17, 18, 19]
正如斯特凡已经回答了你的观察到的行为预期和记录。
如果你想获得这将由范围枚举,而无需枚举的整个范围的最后一个元素,你可以使用Enumerable#reverse_each
irb> (0...5).reverse_each.first
=> 4