Ruby 与枚举#和_索引混淆-开始偏移索引

Ruby 与枚举#和_索引混淆-开始偏移索引,ruby,ruby-1.9.3,Ruby,Ruby 1.9.3,混乱:在上面我已经将起始偏移量设置为1。但是如果我们查看输出,那么11如何代替22。由于22位于1st位置 a=[11,22,31,224,44].to_enum => #<Enumerator: [11, 22, 31, 224, 44]:each> a.select.with_index{|x| puts x if x<2 } => [] a.with_index(2) => #<Enumerator: #<Enumerator: [11, 2

混乱:在上面我已经将起始偏移量设置为
1
。但是如果我们查看输出,那么
11
如何代替
22
。由于
22
位于
1st
位置

a=[11,22,31,224,44].to_enum
=> #<Enumerator: [11, 22, 31, 224, 44]:each>
a.select.with_index{|x| puts x if x<2 }
=> []
a.with_index(2)
=> #<Enumerator: #<Enumerator: [11, 22, 31, 224, 44]:each>:with_index(2)>
irb(main):011:0> a.with_index(2){|x| puts x if x==224}
224
=> [11, 22, 31, 224, 44]
a.with_index(2){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]
综合考虑所有事实,我想知道,即使我们提到了起始偏移量,为什么
enum#with_index
没有从提及的偏移量开始评估

注意:是否有任何直接的方法来打印包含内容的
索引?

有令人困惑的文档,但希望这能让它更清楚

a.with_index(2){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]
正如您所看到的,它实际做的是偏移索引,而不是从给定索引开始迭代。

有令人困惑的文档,但希望这能让它更清楚

a.with_index(2){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x > 224}
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]
a.with_index(1){|x| puts x if x < 224}
11
22
31
44
=> [11, 22, 31, 224, 44]

正如你所见,它实际上是偏移索引,而不是从给定的索引开始迭代。

我也应该起来投票:)因为我的捕获是正确的,只是无法向自己证明,但在你的帮助下,我现在做到了。这是ruby的一个bug吗?否则原始数组元素是如何改变位置的?数组元素保持相同的顺序,只是得到不同的索引值(但根据提供的偏移量仍然是单调的)。在您最初的示例中,请注意,由于您没有使用索引,如果您将#替换为#eachI也应该起来投票:)那么所有代码的行为都是相同的,因为我的捕获是正确的,只是无法向自己证明,但在您的帮助下,我现在做到了。这是ruby的一个bug吗?否则原始数组元素是如何改变位置的?数组元素保持相同的顺序,只是得到不同的索引值(但根据提供的偏移量仍然是单调的)。在最初的示例中,请注意,由于没有使用索引,如果将#替换为#索引,则所有代码的行为都相同