在ruby Range对象中使用三点符号时,我得到了这个:
(0...5).each{|n| p n}
0
1
2
3
4
当我使用'last'方法时,我得到:
(0...5).last
=> 5
我原本预期4
这是一个错误吗?或者有什么我不了解Range对象的概念吗?
答案 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