2

是否可以检索创建当前光纤的光纤?如果我能在创建新的 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 回答