当只有一个选项不为空时做某事

Sum*_*uma 5 collections scala

如果两个选项中的一个不为空,我想计算一些东西。显然这可以通过模式匹配来完成,但有没有更好的方法?

(o1, o2) match {
  case (Some(o), None) => Some(compute(o))
  case (None, Some(o)) => Some(compute(o))
  case _ => None
}
Run Code Online (Sandbox Code Playgroud)

jwv*_*wvh 4

你可以这样做:

if (o1.isEmpty ^ o2.isEmpty)
  List(o1,o2).flatMap(_.map(x=>Some(compute(x)))).head
else
  None
Run Code Online (Sandbox Code Playgroud)

但模式匹配可能是更好的方法。