簡體   English   中英

Scala類型約束令人困惑的錯誤

[英]Scala type constraints confusing error

這段代碼:

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的類型約束說K必須是Option[Int]的子類型, None是,即使我嘗試val a: K = Some(0) Base val a: K = Some(0) ,也會產生相同的錯誤。

我對這種行為非常困惑,不知道為什么會發生這種情況,也許您可​​以幫我嗎?

trait Base[K <: Option[Int]]只是說:有一個類型KOption[Int]子類型。 你的第二個部分GaranteedA正好說明了為什么你的Base定義不能假裝None是的亞型K -imagine,你沒有覆蓋val a 您最終將獲得值None轉換為Some

正因為K是一個亞型Option[Int]None是的子類型Option[Int]並不能保證None是的亞型K

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM