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
}

私はパターンマッチングのためにいくつかの選択肢を持っていました。特に最後の2つのcaseステートメント、時には最初のステートメントです。
しかし、最初の3つはどれも機能していませんcase。なぜですか?(特にcase Wrap(t) =>)?

4

0 に答える 0