例外をスローできるコードを、例外をログに記録して続行する try-catch ブロックでラップするとします。何かのようなもの:
loggingExceptions {
// something dangerous
}
理想的には、呼び出し元のオブジェクトで定義されている Logger があれば、それをログに記録するために使用したいと思います (存在しない場合は、コンパイル時にエラーが発生します)。次のように定義したいと思います。
def loggingExceptions[L <: { def logger: Logger }](work: => Unit)(implicit objectWithLogger: L): Unit = {
try {
work
} catch {
case t: Exception => objectWithLogger.logger.error(t.getMessage)
}
}
objectWithLogger は、クライアント コードで「魔法のように」「this」に展開されます。これ(または同様のこと)は可能ですか?