Ruby';最后一个';不提供最后一个值。为什么?
在ruby Range对象中使用三点符号时,我得到以下结果:Ruby';最后一个';不提供最后一个值。为什么?,ruby,range,Ruby,Range,在ruby Range对象中使用三点符号时,我得到以下结果: (0...5).each{|n| p n} 0 1 2 3 4 当我使用“最后一个”方法时,我得到: (0...5).last => 5 我原以为会有4个 这是虫子吗?或者是关于范围对象的概念有什么我不理解的吗?这是设计的。Ruby 2.0文档包括: 请注意,如果没有参数,last将返回定义范围结束的对象,即使exclude\u end?为true (10..20).last #=> 20 (10...2
(0...5).each{|n| p n}
0
1
2
3
4
当我使用“最后一个”方法时,我得到:
(0...5).last
=> 5
我原以为会有4个
这是虫子吗?或者是关于范围对象的概念有什么我不理解的吗?这是设计的。Ruby 2.0文档包括: 请注意,如果没有参数,
last
将返回定义范围结束的对象,即使exclude\u end?
为true
(10..20).last #=> 20
(10...20).last #=> 20
(10..20).last(3) #=> [18, 19, 20]
(10...20).last(3) #=> [17, 18, 19]
正如Stefan所回答的,您观察到的行为是预期的,并记录在案 如果您想获得范围将枚举的最后一个元素,而不必枚举整个范围,那么可以使用
这里是关于距离对象你不理解的:考虑范围<代码>数学::E…数学::π/代码>。最后一个
应该是什么?范围实际上只是一个开始,一个结束,无论结束是否被排除。整数范围可以枚举的事实是一个特殊特性。Range还有很多其他用途。Range有end
方法,我按。但是我缺少了开始
方法。每个方法都反向。首先
会枚举整个范围,或者可能是(0…5)。max
@Stefan你完全正确。我不知道我在想什么——Enumerable怎么可能对它所混入的类具有反向枚举的特殊知识。(1…100000000)。每个类都反向。首先
将消耗大量内存,但(1…100000000)。max.to\u I
不会。。。不要忘记使用来定义i
,因为像(4..3).max这样的范围将返回nil。
irb> (0...5).reverse_each.first
=> 4