我有以下代碼來理解協變和下限,我故意讓代碼有編譯錯誤。類型的表達式不符合期望的類型B
該getOrElse
工程,這是從選項[+ T]的getOrElse
方法類似。
我會問爲什麼getOrElse2
和getOrElse3
不工作,以更好地理解協變和下限。
所述的編譯錯誤被粘貼爲代碼中的註釋:
class MyOption[+A](val x: A) {
def get():A = x
//similar to Option.getOrElse,which works
def getOrElse[B>:A ](default: => B): B = {
if (x != null) x else default
}
//Compiling Error: Expression of type A doesn't conform to Expected type B
def getOrElse2[B, A<:B ](default: => B): B = {
if (x != null) x else default
}
//Covariant type A occurs in controvariant position in type A of value B
def getOrElse3[B <: A](default:=>B): A = {
if (x != null) x else default
}
}
我明白[B <:A]意思是B是A的子類型/下界,你的意思是[B <:A]也意味着B類型的控制變量A?我認爲上限無關協變或控制。另外,我不明白'協變類型只能啓用綁定類型A'的超類型。 – Tom