0

このコード:

trait Base[+K <: Option[Int]] {
  val a: K = None
}

class GuaranteedA extends Base[Some[Int]] {
  override val a = Some(1)
}

エラーが発生します:

<console>:8: error: type mismatch;
 found   : None.type
 required: K
             val a: K = None

しかし、なぜ?の型制約は、のサブタイプである必要があるKと述べています。KOption[Int]Noneval a: K = Some(0)Base

私はこの動作に非常に混乱しており、なぜこれが起こるのかわかりません. 多分あなたは私を助けることができます?

4

1 に答える 1

4

trait Base[K <: Option[Int]]KのサブタイプであるタイプがありますOption[Int]。2 番目の部分は、オーバーライドしなかった —imagineのサブタイプであるふりを定義できないGaranteedA理由を正確に示しています。に値をキャストすることになります。BaseNoneKval aNoneSome

Kが のサブタイプでOption[Int]あり、Noneが のサブタイプであるからといって、 が のサブタイプであることはOption[Int]保証されません。NoneK

于 2013-04-06T11:59:47.003 に答える