【发布时间】:2017-07-29 09:36:46
【问题描述】:
我有以下代码来理解协变和下限,我故意让代码有编译错误。
getOrElse 起作用,类似于 Option[+T] 的getOrElse 方法。
我会问为什么 getOrElse2 和 getOrElse3 不能更好地理解协变和下限。
编译错误在代码中粘贴为cmets:
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
}
}
【问题讨论】:
标签: scala