Scala:重载方法解析

时间:2013-01-19 19:25:26

标签: scala overloading

Scala的重载方法分辨率似乎很奇怪:

abstract class Parent { type T }
class Child extends Parent { type T = Int }

def f[T <: Parent](a: Array[T]): Array[T#T] = null
def f[T](a: T): Array[T] = null

val s = f(Array(new Child))                   // OK; calls the first f
val t: Array[Child#T] = f(Array(new Child))   // type mismatch; tries to apply the second f

虽然s与t的类型相同,但是使用第一个f成功评估了s,但只是给出了类型提示,编译器尝试第二个f并且无法将Int作为其参数。我最终避免使用方法重载,但出于好奇,有人可以告诉我这里有什么问题吗?

0 个答案:

没有答案