Предположим, я хочу обернуть код, который может генерировать исключения, с блоком 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» в клиентском коде. Возможно ли это (или похожая вещь)?