С учетом следующего случая:
trait Companion {
implicit def str(a: A): String =
s"${this.getClass.getSimpleName}: %d" format a.n
}
class A(val n: Int)
object A extends Companion {}
class B(val x: Int, y: Int) extends A(y)
object B extends Companion {}
Теперь компиляция следующего кода вызовет расходящуюся неявную ошибку:
val b = new B(5, 2)
val s: String = b
println(s)
, поскольку оба объекта A и AA находятся в неявной области действия по умолчаниюАА.Это явно дефектно: класс AA более «точен», чем черта A, поэтому его неявная область действия должна иметь более высокий приоритет.К сожалению, поскольку объекты не могут наследоваться друг от друга, это невозможно объявить.
Поэтому мой вопрос: каков наилучший способ достичь этого, не прибегая к неявной области действия по умолчанию?