, . , - , Fiber each . each, Fiber , , , Fiber.
, " " , , , #to_a . , , - .
C- Enumerator. Ruby, , :
class MyEnumerator
def initialize(enumerable)
@fiber = Fiber.new do
enumerable.each { |item| Fiber.yield item }
end
end
def next
@fiber.resume || raise(StopIteration.new("iteration reached an end"))
end
end
class MyEnumerable
def each
yield 1
yield 2
yield 3
end
end
e = MyEnumerator.new(MyEnumerable.new)
puts e.next
puts e.next
puts e.next
puts e.next