現在のファイバーを作成したファイバーを取得することはできますか? 新しいファイバーを作成するときにこの情報を取得できれば十分です。
呼び出しを行うと「uninitialized fiber」エラーが発生するため、 Monkey-patchingFiber#new
は機能しません。Fiber#current
私はついにそれを機能させる方法を見つけました。initialize
内部がファイバーを初期化しないため、再定義すると失敗します。ただし、エイリアスを作成して新しいものを作成し、古いものを実行することは可能です。
class Fiber
alias_method :old_init, :initialize
def initialize
old_init
@parent = Fiber.current
end
def parent
@parent
end
end
Fiber.current
はファイバーで実行するまで変更されないためresume
、イニシャライザで参照を安全にコピーできます。
これで、システムに「あなたのおじいちゃんは誰?」と尋ねることができます。Fiber.current.parent.parent
.