【发布时间】:2014-06-07 20:27:53
【问题描述】:
我正在看行动书中的 scala,它有这个代码
sealed abstract class Maybe[+A] {
def isEmpty: Boolean
def get: A
def getOrElse[B >: A](default: B): B = {
if(isEmpty) default else get
}
}
final case class Just[A](value: A) extends Maybe[A] {
def isEmpty = false
def get = value
}
case object Nil extends Maybe[scala.Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("Nil.get")
}
如果 getOrElse 的签名定义为 def getOrElse(默认值:A):A = 它没有编译。
作者说 "下界 B>: A 声明类型参数 B 被约束为类型 A 的某个超类型"
但我似乎能够做到这一点并且它有效
val j1 = Just(1)
val l1 = j1.getOrElse("fdsf") //l1 : Any = 1
String 是 Int 的超类型吗?我不明白为什么会这样?就像它回退到参数 1 是类型 A 是 Any 类型(它是)而不是 Int 类型。
【问题讨论】:
标签: scala