我經常遇到想要向不受控制的類添加其他方法的問題。例如,我可能希望有一個功能prettyPrint
,它可以在不具有統一api的不同對象類型上運行(例如,特殊的__str__
方法)。Scala或Jython中多方法的替代方案
Nice
語言和R
使用multimethods完成此操作,這很好地避免了訪問者模式。例如,R
具有plot()
功能。單個程序員可以創建新的類來定義數據類型(例如,網絡圖或股票行情數據)。然後,二級用戶/程序員可以編寫一個繪圖函數來填寫該功能,即使他們無法訪問圖形或股票代碼或其他繪圖函數的代碼。
鑑於我想稍後添加大量功能,使用class.method()
似乎不可行。很多class_plot()
函數爲每個類型也似乎是一個壞主意。定義一個大的plot()
函數檢查類型是不可擴展的。
什麼是multimethods的替代方法?特別是,我對可能在Jython和Scala中工作的設計感興趣。