我知道如果我繼承String類並覆蓋它的大寫方法,我可以用super
調用String類的大寫版本。如果我重新打開了String類並重寫了大寫方法呢?有沒有辦法可以調用該方法的以前版本?Ruby重新打開類 - 可否重寫方法被訪問?
5
A
回答
5
不開箱即用。常用的方法是將現有方法重命名爲新名稱。然後,在您的重寫版本中,用新名稱調用舊方法。
def String
alias to_i old_to_i
def to_i
#add your own functionality here
old_to_i
end
end
你也可能想看看alias_method_chain
,其中做了一些爲你處理。
0
也有另一種有趣的方法來獲得super
工作 - 如果打開類支持它(例如,因爲它是由你自己寫的):
類的方法不是直接在類主體中定義,但在另一個包含的模塊中。要覆蓋重新打開的類的方法,請使用它的擴展版本(可能使用super
)包含您自己的模塊。
例如,在irb-ripl中使用這個插件來讓插件實現他們自己版本的核心方法(調用super
來獲得原始行爲)。
相關問題
- 1. Ruby/Rails:重新打開vs覆蓋類
- 2. 打開grb2文件重新訪問
- 3. Ruby特別重寫父類方法
- 4. 在Ruby中重寫類方法
- 5. 是否可以重新打開菜單?
- 6. 重新打開Ruby類的奇怪問題
- 7. Ruby - 如何重新定義類方法?
- 8. Python重寫字典訪問方法
- 9. VerifyError:class net.sf.cglib.core.DebuggingClassWriter重寫最終方法訪問
- 10. 問題並重新打開
- 11. 父類的方法如何訪問子類的重寫變量?
- 12. 是否可以重寫Model.objects.all()方法?
- 13. 是否可以重寫Grails域類中的List訪問器?
- 14. 無法訪問文本輸入框重新打開GTK窗口
- 15. ROR +重新打開使用Ruby代碼
- 16. 在Ruby中重寫第三方方法
- 17. 重寫的函數/方法仍可訪問嗎?
- 18. 打破重新打開的類
- 19. 重新打開活動時出現AsyncTask(doInBackground方法)問題
- 20. 重寫_create類方法
- 21. 重寫父類的方法
- 22. 重寫hashCode方法在類
- 23. 方法重載父類與重寫
- 24. 是否有可能重寫C#中WebSecurity類中的方法?
- 25. 這是否可以重寫密封類的方法?
- 26. 在重新定義方法中訪問超類方法的問題
- 27. 訪問URL重寫
- 28. Ruby:調用子類中的父類的重寫方法
- 29. 在android中訪問重寫方法的參數的子方法?
- 30. Ruby:從模塊中重新打開一個類
這是[當猴子修補方法時,你能否從新實現中調用重寫的方法](http://StackOverflow.Com/q/4470108/)。 – 2011-06-10 16:20:03