“或” - Scala中的两个选项?

时间:2014-04-18 21:13:38

标签: scala functional-programming scalaz scala-option

我想做这样的事情:

def or[A](x: Option[A], y: Option[A]) = x match {
 case None => y   
 case _ => x 
}

这样做的惯用方法是什么?我能想到的最好的是Seq(x, y).flatten.headOption

3 个答案:

答案 0 :(得分:13)

已为Option定义:

def or[A](x: Option[A], y: Option[A]) = x orElse y

答案 1 :(得分:2)

在palaz中,您可以使用Plus类型类:

scala> 1.some <+> 2.some
res1: Option[Int] = Some(1)

scala> none[Int] <+> 2.some
res2: Option[Int] = Some(2)

scala> none[Int] <+> none[Int]
res3: Option[Int] = None

答案 2 :(得分:0)

如果出于某种原因,您不想使用orElse,那么在Scala中总会有另一种方法。

def or[A](xOpt: Option[A], yOpt: Option[A]) = xOpt.map(Some(_)).getOrElse(yOpt)