Ruby:获取光纤父级

时间:2013-01-31 11:08:48

标签: ruby fibers

是否可以检索产生当前光纤的光纤?如果我能够在创建新光纤时获得此信息就足够了。

Monkey-patching Fiber#new不起作用,因为调用Fiber#current会导致“未初始化的光纤”错误。

1 个答案:

答案 0 :(得分: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