我正在閱讀Scala中的函數式編程,而在第04章中,作者自己實現了Option。現在,定義函數getOrElse
當他們使用一個上限的A
類型限制的父(如果理解正確的)Scala選項類型上限不明白
所以,定義雲:
sealed trait Option[+A] {
def getOrElse[B >: A](default: => B): B = this match {
case None => default
case Some(a) => a
}
}
所以,當我們有一些像
val a = Some(4)
println(a.getOrElse(None)) => println prints a integer value
val b = None
println(b.getOrElse(Some(3)) => println prints a Option[Integer] value
a
具有類型Option[Int]
,所以A
會Int
類型。 B
將是類型Nothing
。 Nothing
是每個其他類型的子類型。這意味着Option[Nothing]
是Option[Int]
的一個子類型(由於協方差),對吧?我們說B
必須是超類型?!那麼我們怎麼能回到Int
?這對我來說有點令人困惑......
有人試圖澄清嗎?
謝謝,但請您提供一個我們無法傳遞給res196.getOrElse的例子......目前,在這個例子中,我沒有看到有一個下限的觀點。或者更好地說,我現在不明白一個類型是什麼意思是一個下限...... – Marin
@Marin你可以將任何類型傳遞給'getOrElse'。看我的編輯。 –
謝謝!我想我現在明白了。 – Marin