跟着我死了 纤维 </跨度> 打印出前几次迭代后的错误。有谁知道为什么?
类SumPow def初始化(一) sum = a pow = a @ 纤维 </跨度> = Fiber.new做 | sum | 总结结束
输出:
312tmp / fiber_enum.rb:96:在“简历”中:死了 纤维 </跨度> 叫(FiberError) 来自tmp / fiber_enum.rb:96:in the next’ 来自tmp / fiber_enum.rb:101:在’block in each’中 来自
代码正在调用 resume 无论纤维状态如何。
resume
检查光纤是否可以通过呼叫恢复 Fiber#alive?
Fiber#alive?
def each while @fiber.alive? do yield self.next end end
的 注意 强> 你需要这样做 require 'fiber' 使用 alive? 方法。
require 'fiber'
alive?
的 UPDATE 强> 符合编辑问题。
原始代码只产生一次。要无限期地迭代,你需要循环。
def initialize(a) sum = a pow = a @fiber = Fiber.new do loop do # <------------- Fiber.yield sum pow = pow * a sum = sum + pow end # <----------------- end end