Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala中的性状推断_Scala_Types_Casting_Traits_Higher Kinded Types - Fatal编程技术网

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:

我在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: 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]]

的一个子类型,不?