scala中的性状推断
我在scala中的类型推断方面遇到了问题。我正在使用更高级类型的类,这扩展了一些特性;但是scala编译器无法将类型解析为它们扩展的特征。此处显示了一个最简单的示例:scala中的性状推断,scala,types,casting,traits,higher-kinded-types,Scala,Types,Casting,Traits,Higher Kinded Types,我在scala中的类型推断方面遇到了问题。我正在使用更高级类型的类,这扩展了一些特性;但是scala编译器无法将类型解析为它们扩展的特征。此处显示了一个最简单的示例: trait traitA[X] trait traitB[X] class A[X] extends traitA[X] {} class B extends traitB[C] {} class C {} val a = Seq[A[B]]() val b: Seq[traitA[traitB[C]]] = a Error:
trait traitA[X]
trait traitB[X]
class A[X] extends traitA[X] {}
class B extends traitB[C] {}
class C {}
val a = Seq[A[B]]()
val b: Seq[traitA[traitB[C]]] = a
Error: type mismatch;
found : Seq[A[B]]
required: Seq[traitA[traitB[C]]]
val b: Seq[traitA[traitB[C]]] = a
我可以得到一个Seq[traitA[B]],但不能得到一个Seq[traitA[traitB[C]]
我错过了什么
感谢您的帮助您必须在
traitA
中请求协方差,如下所示:
trait traitA[+X]
您将得到:
scala> val b: Seq[traitA[traitB[C]]] = a
res0: Seq[traitA[traitB[C]]] = List()
为什么??因为
A[X]
是traitA[X]
的一个子类型,您想强制执行Seq[A[X]
也是Seq[traitA[X]]
的一个子类型,不?