我用Intellij在scala程序中编写了一个方法,如下所示:
def myMethod(c: Option[C]) = { val x = ... val y = ... c.filter(...) .map(_ => { (x,y) match { case (a,b) => "val1" case (c,d) => "val2" case (_, _) => "val3" } }) }
Intellij提示此方法的输出类型为Option[String]。但正如我使用的filter方法,它可能返回None,那么这个提示是不是错了呢?
object None 延伸 Option[Nothing]
object None
Option[Nothing]
Nothing 是一种“底部类型”,即它继承自所有内容。
Nothing
Option 在其类型参数上是协变的。
Option
也就是说 None 他是他的后裔 Option[X] 尽一切可能 X
None
Option[X]
X
因此,两者之间的LUB(最小上限) 和 Option[String] 是
Option[String]