让我定义一些类型
trait H
trait Gen[h <: H]
trait Gen2[h <: H] extends Gen[h]
trait Ez[g[h <: H] <: Gen[h]] // needs to be invariant
case class CC[g[h <: H] <: Gen[h], E[g[h <: H] <: Gen[h]] <: Ez[g]](i: E[g])
解决方法https://issues.scala-lang.org/browse/SI-5900
的自定义提取器object CCX {
def unapply[g[h <: H] <: Gen[h], E[g[h <: H] <: Gen[h]] <: Ez[g]](i: CC[g, E]): Option[E[g]] = ???
}
及其用例
// not compiles
(null: AnyRef) match {
case CCX(i: Ez[Gen2]) =>
}
在编译时使用Scala 2.10.4,我收到以下错误
pattern type is incompatible with expected type;
found : Ez[Gen2]
required: Ez[g] where type g[h <: H] <: Gen[h]
case CCX(i: Ez[Gen2]) =>
^
但Ez[Gen2]
似乎符合<{p}}中的Ez[g]
// these compiles
val i: Ez[Gen2] = ???
val cc = CC(i)
val u: Option[Ez[Gen2]] = CCX.unapply(cc)
我想知道这是不是一个错误。另外,您能解释一下这些资源的原因或链接吗?