考虑以下代码:
trait Trait {
type X
type Y[_ <: X]
}
type T[X0,Y0[_ <: X0]] = Trait { type X = X0; type Y[S <: X0] = Y0[S] }
class TraitImpl extends Trait {
override type X = Int
override type Y[I <: Int] = List[I]
}
case class Wrap[X,Y[_ <: X]](t: T[X,Y])
val wrap = new Wrap[Int,List](new TraitImpl) // why explicitly write types?
为什么要显式编写类型,请参阅我的另一个问题。
现在我想进行模式匹配wrap
:
wrap match {
case w: Wrap[_,_] => // error
case w: Wrap[_,_[_]] => // error
case Wrap(t) => // error
case w: Wrap[Int,List] => // fine
}
我习惯于有多种模式匹配选择,尤其是最后两个case
语句,有时是第一个语句。
但是前三个case
都不起作用,为什么?(特别是case Wrap(t) =>
)?