26

2つのオプションを組み合わせてScalaに事前定義された関数xがありますか?

Some(a) x None => Some(a)
None x Some(b) => Some(b)
None x None => None
4

3 に答える 3

49

はい、これがorElse方法です。最初に定義された値を選択するかNone、どちらも定義されていない場合に選択します。

scala> Some(1) orElse None
res0: Option[Int] = Some(1)

scala> None orElse Some(1)
res1: Option[Int] = Some(1)

scala> None orElse None
res2: Option[Nothing] = None

scala> Some(1) orElse Some(2)
res3: Option[Int] = Some(1)
于 2013-01-13T16:13:17.297 に答える
4

質問のコメントで、あなたはあなたが持つことができないSome(a)Some(b)言っているので、あなたが本当に持っているのはですOption[Either[Int,Int]]。その場合、x.map(_.merge)に戻るためにOption[Int]使用できます。

scala> val x:Option[Either[Int,Int]] = Some(Left(2))
x: Option[Either[Int,Int]] = Some(Left(2))

scala> x.map(_.merge)
res0: Option[Int] = Some(2)
于 2013-01-13T22:58:42.773 に答える
4

手でそれを行うのは難しいことではありません:

scala> val a = Some(1)
a: Some[Int] = Some(1)

scala> val b = Some(2)
b: Some[Int] = Some(2)

scala> Seq(a,b).flatten.headOption
res0: Option[Int] = Some(1)
于 2013-01-13T16:14:28.150 に答える