Scala 如何重载具有相同签名但具有附加隐式参数的方法
目前,为了在我们的Play应用程序中添加登录的标准前缀,我使用额外的函数覆盖LoggerLike traitScala 如何重载具有相同签名但具有附加隐式参数的方法,scala,operator-overloading,mixins,Scala,Operator Overloading,Mixins,目前,为了在我们的Play应用程序中添加登录的标准前缀,我使用额外的函数覆盖LoggerLike trait trait MyLogger extends LoggerLike { ... def error(message: => String, error: => Throwable)(implicit myObject: MyObject) { if (super.isErrorEnabled) logWithPrefix(encounte
trait MyLogger extends LoggerLike {
...
def error(message: => String, error: => Throwable)(implicit myObject: MyObject) {
if (super.isErrorEnabled) logWithPrefix(encounterAware, super.error, message, error)
}
private def logWithPrefix(myObject: MyObject, log: (=> String) => Unit, message: => String) = {
log(s"A:${myObject.A} ${message}")
}
...
}
然后像这样使用它:
new Logger(LoggerFactory.getLogger(this.getClass.getSimpleName)) with MyLogger
我希望这只会影响上下文中包含隐式myObject的日志条目,并使所有旧引用保持有效,但我的所有日志都开始引用新方法
我不想更改方法的名称,也不想为implicit提供默认值
我需要如何声明错误方法以获得所需的行为 不能仅使用隐式重载。调用哪个重载之间的差异不能取决于隐式是否在作用域中;解决方案是使用“磁铁模式”,例如此处