Scala中的存在类型声明

iev*_*sha 11 scala existential-type

以下存在类型声明之间有什么区别:

trait A[T <: A[T]]

1. def existentialErr(arg: A[T forSome{type T <: A[T]}]): Unit =()
2. def existentialOk(arg: A[T] forSome{type T <: A[T]}): Unit =()
Run Code Online (Sandbox Code Playgroud)

第1点生成以下编译时错误:

类型参数[T forSome { type T <: packagename.A[T] }]不符合特征A的类型参数边界[T <: packagename.A[T]]

点2编译没有问题.

一般来说,这个问题与以下未解答的问题非常类似: Scala中与存在类型的混淆

转载于Scala 2.11.6

UPD:Travis Brown 在这里提供了答案