任何人都可以用 Scala 隐式转换机制向我解释以下情况。有一个代码:
object Main {
implicit val x:Int => String = v => "val"
implicit def y(v:Int) = "def"
def p(s:String) = print(s)
def main(args: Array[String]): Unit = {
p(1)
}
}
此代码打印“val”。但是当我评论第二行时:
//implicit val x:Int => String = v => "val"
代码打印“def”。
因此,在这种情况下,两种隐式转换(x 和 y)都是可能的。有一个非歧义规则- 只有在没有其他可能的转换插入时才插入隐式转换。根据这条规则,这段代码根本不应该被编译。但是代码已成功编译并执行。我不明白什么?
谢谢。