【发布时间】:2017-12-01 11:53:46
【问题描述】:
我有以下特点:
trait Tr1 {
implicit val i: Int
}
trait Ctx { tr: Tr1 =>
def test: Int = implicitly[Int]
}
现在我运行我的应用程序如下:
def main(args: Array[String]): Unit = {
val ctx: Ctx = new Ctx with Tr1 {
override implicit val i: Int = 123
}
println(ctx.test) //prints 123!!!
}
令人惊讶的是它打印了123。我以为我们已经将val i 初始化为0,但编译器发现我们有一个将implicit val i: Int 覆盖为值123 的实例。
现在我对这种情况下的隐式解析感到困惑。能解释一下吗?
【问题讨论】: