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作为其参数。我最终避免使用方法重载,但出于好奇,有人可以告诉我这里有什么问题吗?