Ruby'Range.last'没有给出最后一个值。为什么?

时间:2012-07-13 09:36:02

标签: ruby range

在ruby Range对象中使用三点符号时,我得到了这个:

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

当我使用'last'方法时,我得到:

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

我原本预期4

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

2 个答案:

答案 0 :(得分:12)

这是设计的。 Ruby 2.0文档是more specific

  

请注意,没有参数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]

答案 1 :(得分:1)

Stefan已回答您的观察到的行为是预期的并且有记录。

如果你想获得范围枚举的最后一个元素而不必枚举整个范围,你可以使用Enumerable#reverse_each

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