2

考虑以下代码:

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) =>)?

4

0 回答 0