是否可以检索产生当前光纤的光纤?如果我能够在创建新光纤时获得此信息就足够了。
Monkey-patching Fiber#new
不起作用,因为调用Fiber#current
会导致“未初始化的光纤”错误。
答案 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
。