为什么这种光纤会以这种方式运行

时间:2013-12-20 12:18:34

标签: ruby fiber

在此代码中:

fiber = Fiber.new do |first, second|
  num = Fiber.yield first + second + 2
end

puts fiber.resume 5, 4
puts fiber.resume 3

输出分别为113

我理解为什么第一个11的输出为fiber.resume(其参数作为块参数传递给Fiber.new)但我不明白为什么第二个fiber.resume }返回3。发生了什么事?

1 个答案:

答案 0 :(得分:1)

来自文档:

  

Fiber#resume方法接受任意数量的参数if   这是第一次恢复,然后他们将作为块传递   参数。否则它们将是调用的返回值   Fiber.yield

你的第二次恢复通话只返回Fiber#yield返回的值,这只是3。

http://www.ruby-doc.org/core-2.0.0/Fiber.html