gpt4 book ai didi

scala - 关于 Scala 隐式转换非歧义规则的问题

转载 作者:行者123 更新时间:2023-12-04 02:11:04 25 4
gpt4 key购买 nike

任何人都可以用 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)都是可能的。有一个 无歧义规则 - 仅当没有其他可能的转换可以插入时才插入隐式转换。根据此规则,根本不应编译此代码。但是代码编译执行成功。我不明白什么?

谢谢。

最佳答案

原因在 Scala 语言规范第 6.26.2 节中有说明。

在将该方法视为函数之前,需要通过执行 eta 扩展将其转换为函数。因此,必须再应用一次隐式转换,因此 val被选中。

更新 : 删除了有缺陷的示例。

对没有参数的方法的评估总是隐式执行。

关于scala - 关于 Scala 隐式转换非歧义规则的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3962620/

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