为什么要输入任何类型?

时间:2017-03-18 18:19:56

标签: scala

我有跟随ADT

sealed trait Option[+A] {

  def map[B](f: A => B): Option[B] = this match {
    case None => None
    case Some(a) => Some(f(a))
  }

  def getOrElse[B>:A](default: => B): B = this match {
    case None => default
    case Some(a) => a
  }

}

case class Some[+A](get: A) extends Option[A]
case object None extends Option[Nothing]

我在getOrElse函数中玩了一下:

scala> Some(4).getOrElse(44)
res1: Int = 4

scala> Some(4).getOrElse("Hello")
res2: Any = 4

为什么上一次返回Any类型?

1 个答案:

答案 0 :(得分:4)

您说过B必须是A的超级类型。

在第一个示例中,AB都是整数,因此没有问题。

在第二个示例中,您有String和int。满足约束[B>:A]的唯一超类型int是Any

这样想一下:你期望它会返回什么类型?您有一个int类型默认为String类型。该类型必须为Any才能实现。