次のコードスニペットの動作を理解しようとしています。私の具体的な焦点はFiber#transfer
メソッドです。Rubyファイバ:転送されたファイバの再開
require 'fiber'
fiber2 = nil
fiber1 = Fiber.new do
puts "In Fiber 1" # 3
fiber2.transfer # 4
end
fiber2 = Fiber.new do
puts "In Fiber 2" # 1
fiber1.transfer # 2
puts "In Fiber 2 again" # 5
Fiber.yield # 6
puts "Fiber 2 resumed" # 10
end
fiber3 = Fiber.new do
puts "In Fiber 3" # 8
end
fiber2.resume # 0
fiber3.resume # 7
fiber2.resume # 9
私は、コード行に、正しい実行順序で番号が付けられています。 fiber3.resume
が返されてfiber2.resume
が呼び出されると、#10と記された行でfiber2
の内部で実行が継続することが期待されます。リストの最後の行から報告されたエラーです
fiber2.rb:24:in `resume': cannot resume transferred Fiber (FiberError)
from fiber2.rb:24:in `<main>'
:代わりに、私は次のエラーを取得するfiber2.resume
が。