gpt4 book ai didi

scala - 为什么当 B 扩展 A 时类型为 A 和 B 的范围内隐式值没有歧义?

转载 作者:行者123 更新时间:2023-12-01 23:27:05 26 4
gpt4 key购买 nike

为什么 Test2 中的代码可以编译,即使我们显然有不明确的隐式值?


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 implicit values`
Method.foo
}

最佳答案

Test2 中没有歧义。 i2i1 有更具体的类型,所以 i2i1 有更高的优先级。

Test3中,i1i2有相同的类型A,所以这是歧义。

https://stackoverflow.com/a/57934397/5249621

关于scala - 为什么当 B 扩展 A 时类型为 A 和 B 的范围内隐式值没有歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com