Option には2つの値 Some と None がある。Some はある種のコンテナで中に別の値を持つことができるけど、None は値を持つことができない。
つまり、エラーが起こったこと自体は None で知らせることができても、どんなエラーなのかはわからないわけだ。そこで Either の登場だ。
Either にも2つの値 Right と Left があって、両方とも中身の値を持つことができる。通常は、正常だった時に Right を、何かエラーがあったときに Left を使う。Either は2つの型パラメータをとる。つまり Either[A, B] で、A は Left の中身の型、B は Right の中身の型だ。
scala> val v1: Either[String, Int] = Right(123) v1: Either[String,Int] = Right(123) scala> val v2: Either[String, Int] = Left("abc") v2: Either[String,Int] = Left(abc)
もちろん、パターンマッチもできる。
scala> v1 match { | case Right(i) => println(i) | case Left(s) => println(s) | } 123