transfer(*args) -> object
[permalink][rdoc][edit]-
自身が表すファイバーへコンテキストを切り替えます。
自身は Fiber#resume を呼んだファイバーの子となります。 Fiber#resume との違いは、ファイバーが終了したときや Fiber.yield が呼ばれたときは、ファイバーの親へ戻らずにメインファイバーへ戻ります。
- [PARAM] args:
- メインファイバーから呼び出した Fiber#resume メソッドの返り値として渡したいオブジェクトを指定します。
- [RETURN]
- コンテキスト切り替えの際に、Fiber#resume メソッドに与えられた引数を返します。
- [EXCEPTION] FiberError:
- 自身が既に終了している場合、コンテキストの切り替えが Thread クラスが表すスレッド間をまたがる場合、 Fiber#resume を呼んだファイバーがその親か先祖である場合に発生します。
require 'fiber' fr1 = Fiber.new do |v| :fugafuga end fr2 = Fiber.new do |v| fr1.transfer :fuga end fr3 = Fiber.new do |v| fr2.resume :hoge end p fr3.resume # => :fugafuga