1

我想做这样的事情:

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

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

4

3 回答 3

13

它已经定义为Option

def or[A](x: Option[A], y: Option[A]) = x orElse y
于 2014-04-18T21:18:12.870 回答
2

在 scalaz 中,您可以为此使用 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
于 2014-04-18T21:17:50.087 回答
0

如果由于某种原因您不想使用orElse,那么在 Scala 中总是有另一种方法可以做到这一点。

def or[A](xOpt: Option[A], yOpt: Option[A]) = xOpt.map(Some(_)).getOrElse(yOpt)
于 2014-04-19T20:15:55.593 回答