2011-10-05 26 views
2

我發現IRB作爲試錯樣式調試的工具非常有用,我不知道問題來自哪裏,但可以利用IRB的REPL特性快速遍歷一系列潛在方式重現問題並將其提煉出來。在IRB中圍繞/調試。猴子補丁的方法,然後「撤消」改變,而不會退出IRB?

偶爾我決定重新打開一個屬於加載的gem的類,並向方法中添加一些調試輸出,或者完全重寫該方法。一旦完成,是否有一種容易的方式「解除猴子補丁」,而不必退出IRB並重新啓動它(我目前的方法)?

+0

有時做一個負載 '路徑/要/ file.rb' 的變化將被還原。但是如果寶石已經做了一些猴子修補,那麼你需要重新啓動'irb',否則它可能會修改你的修改,而不是原來的實現。 – Augusto

+0

如果我使用alias_method或類似的東西,而不是重寫實際的方法,我不知道是否很容易只是「unalias」方法。 – d11wtq

+0

我認爲這個功能在ruby 2.我真的認爲是必須的,特別是在內核,模塊和對象上有這麼多的框架添加/覆蓋方法。 – Augusto

回答

2

如果您正在重新定義方法,則可以爲舊方法創建舊版本併爲alias創建新方法,然後定義新方法。完成後,您可以再次重新定義該方法並調用方法別名。

步驟一:

alias :old_method :method 

def method 
    # fancy new stuff 
end 

當你完成:

def method 
    old_method 
end 
+0

哈哈,我剛剛在原來的問題上評論過這個,因爲我的腦子狂野,然後看到你貼出了完全相同的東西!這看起來就像我在想的那樣。謝謝! – d11wtq

+0

這個招數很有用! – d11wtq

+2

而不是重新定義你可以「重新別名」別名:method:old_method'(和'remove_method(:old_method)'如果你想清理)。 – steenslag