向上泛型泛型类型构造函数

时间:2019-05-03 13:35:46

标签: scala

为什么以下代码不能编译?

appendChild

(标量2.12.8)

我遇到以下错误:

def test[T, C[_] <: Iterable[_]](x: C[T]) = {
  val z: Iterable[T] = x
}

1 个答案:

答案 0 :(得分:4)

由于T中的x: C[T]T中的z: Iterable[T]不同,因此无法编译。如果您明确指定C[A] <: Iterable[A]类型,它将进行编译。

T有所不同,因为在函数签名中您使用的是higher kinded types,它宽松地声明: C是任何类型的类型构造函数

类型的上限和下限与同类的上限不同。

PS:根据您要完成的任务,可能不需要更高种类的类型,而只是增加了复杂性。