2

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 と同じ型ですが、s は最初の f を使用して正常に評価されますが、型ヒントを与えるだけで、コンパイラは 2 番目の f を試行し、引数として Int を要求して失敗します。メソッドのオーバーロードの使用を避けましたが、好奇心から、ここで何が問題なのか誰か教えてもらえますか?

4

0 に答える 0