假設我想打包可以用一個try-catch塊來拋出異常的代碼,該塊記錄異常並繼續。喜歡的東西:是否有可能將「this」作爲隱式參數傳遞給Scala?
loggingExceptions {
// something dangerous
}
理想情況下,我想用用於記錄調用對象上定義的記錄器,如果有的話(如果沒有,得到一個編譯時錯誤)。我很想定義是這樣的:
def loggingExceptions[L <: { def logger: Logger }](work: => Unit)(implicit objectWithLogger: L): Unit = {
try {
work
} catch {
case t: Exception => objectWithLogger.logger.error(t.getMessage)
}
}
其中objectWithLogger會以某種方式「神奇」擴展爲「本」,在客戶端代碼。這是(或類似的東西)嗎?
謝謝,這個作品!但有沒有其他解決方案不涉及改變所有希望使用loggingExceptions(...)的類的聲明? – 2010-11-24 19:23:55
@JPP不,至少該調用站點需要在範圍內具有預期類型的隱式對象。例如,您可以將隱式參數設置爲Logger,並在調用對象中將def logger更改爲implicit def logger。然而,除非必要,否則應該避免暗示,並且特徵非常適合這個問題。示例中的 – 2010-11-24 19:47:25