Why in-scope implicit values typed A and B are not ambiguous when B extends A?
问题 Why does the code in Test2 compile even though we clearly have ambiguous implicit values? object Method { def foo(implicit i: A): Unit = println(i.i) } trait A { val i: Int } class B(override val i: Int) extends A object Test1 { implicit val i1: A = new A { val i: Int = 20 } } object Test2 { implicit val i2: B = new B(10) import Test1._ // This compiles fine and prints 10 Method.foo } object Test3 { implicit val i2: A = new B(10) import Test1._ // This does not compile, get `ambiguous