1

在这段代码中:

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。这是怎么回事?

4

1 回答 1

1

从文档:

Fiber#resume 方法接受任意数量的参数,如果它是第一次调用 resume,那么它们将作为块参数传递。否则它们将是调用 Fiber.yield 的返回值

您对 resume 的第二次调用仅返回 Fiber#yield 返回的值,即 3。

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

于 2013-12-20T12:27:45.443 回答