自分の疑問点を整理するためのメモです。
Noneとはなにか?
None
はOption[Nothing]
を継承したobjectである。Scalaのコード上でNone
がでてきた場合、それはNone
のシングルトンオブジェクトである(本当か?)。
以下はscala/Option.scalaからの抜粋。Option(null)
するとNone
が返る。
/** An Option factory which creates Some(x) if the argument is not null,
* and None if it is null.
*
* @param x the value
* @return Some(value) if value != null, None if value == null
*/
def apply[A](x: A): Option[A] = if (x == null) None else Some(x)
Nullとはなにか?
scala.Nothing
と同様で全ての型のサブタイプで、型階層の一番下にくる。
nullとはなにか?
null
はNull
クラスのシングルトンインスタンスである。Null
クラスはAnyRef
クラスのサブクラスであるので、AnyVal
のサブクラスであるInt
型の変数には代入できない。ひらたく言うとJavaと同じということ。
疑問点
Option[Null] = None
とはなんなのか?
scala> Option(null)
res67: Option[Null] = None
REPLでOption(null)
とするとOption(None)
型の値としてNone
が返る、という理解はあっているのかな?
scala> None
res76: None.type = None
scala> None == Option(null)
res77: Boolean = true
None
とOption(null)
が等価であるというのはどうやって定義されているんだろう?