以下是 Scala 中的有效语句:
scala> var x: Option[Int] = Some(3)
x: Option[Int] = Some(3)
scala> var x: Option[Int] = None
x: Option[Int] = None
以下内容无效:
scala> var x: Option[Int] = 3
<console>:7: error: type mismatch;
found : Int(3)
required: Option[Int]
var x: Option[Int] = 3
到目前为止,这些例子对我来说是有意义的;Option[T] 类型的值可以是 Some[T] 或 None 类型,因此编译器会阻止您分配既不属于任何类型的值。
但是,Scala 编译器似乎接受了这一点:
scala> val x: Option[Int] = null
x: Option[Int] = null
如果我然后尝试对选项进行模式匹配(例如,如下所示),我会遇到我没想到的失败 - 为什么编译器不通过拒绝 null 的分配来保护我免受这种情况的影响?
x match {
case Some(y) => println("Number: ", y)
case None => println("No number")
}