林心如Range.last“没有给出最后的值。 为什么?(Ruby 'Range.las

2019-06-26 06:43发布

当使用红宝石Range对象三联点符号,我得到这样的:

(0...5).each{|n| p n}
0
1
2
3
4

当我使用“最后”的方法获得:

(0...5).last
 => 5 

我本来期望4

这是一个错误吗? 或者是有什么我不明白有关Range对象的概念?

Answer 1:

这是由设计。 红宝石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] 


Answer 2:

正如斯特凡已经回答了你的观察到的行为预期和记录。

如果你想获得这将由范围枚举,而无需枚举的整个范围的最后一个元素,你可以使用Enumerable#reverse_each

irb> (0...5).reverse_each.first
=> 4


文章来源: Ruby 'Range.last' does not give the last value. Why?
标签: ruby range