Слишком много значений при использовании итератора each_with_index в Ruby

#ruby

#ruby

Вопрос:

У меня есть результирующий набор ( Mongoid::Criteria ) в Ruby, который является результатом 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 элементов.

Я просмотрел свои данные и не могу найти шаблон, объясняющий такое поведение.

Почему _each_with_index_ иногда возвращает больше элементов?

Комментарии:

1. Что происходит в ...lots of code... ? Вы уверены, что этот код не вызывает такое поведение?