Scala 如何重载具有相同签名但具有附加隐式参数的方法

Scala 如何重载具有相同签名但具有附加隐式参数的方法,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

目前,为了在我们的Play应用程序中添加登录的标准前缀,我使用额外的函数覆盖LoggerLike trait

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提供默认值


我需要如何声明错误方法以获得所需的行为

不能仅使用隐式重载。调用哪个重载之间的差异不能取决于隐式是否在作用域中;解决方案是使用“磁铁模式”,例如此处