我知道如果我繼承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. 在Ruby中重寫類方法
- 3. 重新打開Ruby類的奇怪問題
- 4. Ruby - 如何重新定義類方法?
- 5. VerifyError:class net.sf.cglib.core.DebuggingClassWriter重寫最終方法訪問
- 6. 問題並重新打開
- 7. 父類的方法如何訪問子類的重寫變量?
- 8. 是否可以重寫Grails域類中的List訪問器?
- 9. ROR +重新打開使用Ruby代碼
- 10. 重寫hashCode方法在類
- 11. 重寫_create類方法
- 12. 重寫父類的方法
- 13. 是否有可能重寫派生類中的靜態方法?
- 14. 在重新定義方法中訪問超類方法的問題
- 15. Ruby:調用子類中的父類的重寫方法
- 16. 訪問URL重寫
- 17. Ruby:從模塊中重新打開一個類
- 18. 在android中訪問重寫方法的參數的子方法?
- 19. 方法必須重寫超類方法
- 20. 重新打開AVCaptureSession
- 21. Son中的重寫方法是否可以調用C++中父模板類的重寫方法?
- 22. 重新加載頁面是否重新打開
- 23. Arduino:重寫打印類問題
- 24. 凡重新打開類回報率
- 25. URL重寫問題重新寫入
- 26. 重新定義File :: dirname ruby方法
- 27. ruby/datamapper:重構類方法到模塊
- 28. 你可以重寫Ruby中的別名方法嗎?
- 29. 階 - 嘗試打印重寫toString方法
- 30. 流在循環中寫入OutputStream時無法重新打開
這是[當猴子修補方法時,你能否從新實現中調用重寫的方法](http://StackOverflow.Com/q/4470108/)。 – 2011-06-10 16:20:03