以下存在类型声明之间有什么区别:
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 =()
第1点产生以下编译时错误:
类型参数
[T forSome { type T <: packagename.A[T] }]
不符合特征A的类型参数边界[T <: packagename.A[T]]
第2点编译没有问题。
一般来说,这个问题非常类似于以下未解答的问题: Confusion with existential types in Scala
转载于 Scala 2.11.6
UPD:Travis Brown提供了答案 here