在此代码中:
fiber = Fiber.new do |first, second|
num = Fiber.yield first + second + 2
end
puts fiber.resume 5, 4
puts fiber.resume 3
输出分别为11
和3
。
我理解为什么第一个11
的输出为fiber.resume
(其参数作为块参数传递给Fiber.new
)但我不明白为什么第二个fiber.resume
}返回3
。发生了什么事?
答案 0 :(得分:1)
来自文档:
Fiber#resume方法接受任意数量的参数if 这是第一次恢复,然后他们将作为块传递 参数。否则它们将是调用的返回值 Fiber.yield
你的第二次恢复通话只返回Fiber#yield返回的值,这只是3。