Я удивлен, что Enumerator#each не начинается с текущей позиции в последовательности.
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
puts e.next
puts e.next
e.each{|x| puts x}
# I expect to see 1,2,3 but I see 1,2,1,2,3
# apparently Enumerator's each (inherited from Enumerable) restarts the sequence!
Я делаю это неправильно? Есть ли способ построить еще один Enumerator (из e), который будет иметь ожидаемое каждое поведение?
1,2,1,2,3
, если начнете, например, с массив[1,2,3]
вместо вашего примера, поэтому конструкция вашего объекта в порядке, но если вы сделаетеe.each{|x| next if x < 3; puts x; }
, в цикле будет выведено только 3.next
иeach
не взаимодействуют так, как вы ожидаете. - person Neil Slater   schedule 05.05.2013