2

現在のファイバーを作成したファイバーを取得することはできますか? 新しいファイバーを作成するときにこの情報を取得できれば十分です。

呼び出しを行うと「uninitialized fiber」エラーが発生するため、 Monkey-patchingFiber#newは機能しません。Fiber#current

4

1 に答える 1

2

私はついにそれを機能させる方法を見つけました。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.

于 2013-03-23T09:32:57.290 に答える