Для волокон у нас есть классический пример: порождение чисел Фибоначчи
fib = Fiber.new do
x, y = 0, 1
loop do
Fiber.yield y
x,y = y,x+y
end
end
Зачем нам нужны волокна? Я могу переписать это с помощью того же Proc (закрытие, на самом деле)
def clsr
x, y = 0, 1
Proc.new do
x, y = y, x + y
x
end
end
Так что
10.times { puts fib.resume }
и
prc = clsr
10.times { puts prc.call }
вернут один и тот же результат.
Итак, в чем преимущества волокон. Какие вещи я могу написать с помощью fibers, которые я не могу сделать с помощью lambdas и других крутых возможностей Ruby?