2013-01-31 90 views
2

是否有可能檢索創建當前光纖的光纖?如果我能夠在創建新光纖時獲得這些信息就足夠了。紅寶石:獲取光纖父母

猴子修補Fiber#new不起作用,因爲調用Fiber#current會導致「未初始化光纖」錯誤。

回答

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