以下は、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
その後、オプションでパターン マッチを実行しようとすると (たとえば、以下のように)、予期しないエラーが発生します。
x match {
case Some(y) => println("Number: ", y)
case None => println("No number")
}