在Ruby中将每个_与_索引迭代器一起使用时,值过多

在Ruby中将每个_与_索引迭代器一起使用时,值过多,ruby,Ruby,我在Ruby中有一个结果集(Mongoid::Criteria),它是Mongoid查询的结果。在为这个结果集的迭代输出添加一些格式时,我有时会得到额外的内容 例如: widgets = Things.where(type: 'widget') 说小部件的数量是20,如果我这样做: widgets.each_with_index do |sprocket, index| puts "#{sprocket.name} is number #{index} in the list." .

我在Ruby中有一个结果集(
Mongoid::Criteria
),它是
Mongoid
查询的结果。在为这个结果集的迭代输出添加一些格式时,我有时会得到额外的内容

例如:

widgets = Things.where(type: 'widget')
说小部件的数量是20,如果我这样做:

widgets.each_with_index do |sprocket, index|
  puts "#{sprocket.name} is number #{index} in the list." 
  ...lots of code...
  yield sprocket
end
我将返回22行,其中20个链轮中的两个被复制。这个循环在一个更大的循环中。当我重新运行代码时,它不会每次都发生,也不会每次都重复相同的链轮

奇怪的是,如果你这样做:

widgets.each do |sprocket, index|
  puts "#{sprocket.name} is number #{index} in the list."
end
我有一张20个项目的清单

我已经查看了我的数据,但找不到解释这种行为的模式


为什么每个带有索引的
\u有时返回更多的项目?

中发生了什么…大量的代码…
?您确定该代码没有导致此行为吗?