鉴于以下 Scala 代码:
object test {
def byval(a: Int) = println("Int")
def byval(a: Long) = println("Long")
def byname(a: => Int) = println("=> Int")
def byname(a: => Long) = println("=> Long")
def main(args: Array[String]) {
byval(5)
byname(5)
}
}
调用 byval(5) 可以正确编译,但 byname 无法编译:
ambiguous reference to overloaded definition
为什么?我希望在重载方面观察到按值和按名称参数的相同行为……如何修复?
这是因为 JVM 不支持“按名称”参数,因此 Scala 必须以另一种方式实现它。=> X
实际上编译为Function0[X]
,这会擦除Function0[Object]
,这使得 Scala 无法区分仅通过名称参数的预期类型不同的两种方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)