scala中特征的推断

Inference of traits in scala

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

的子类型