如何产生多个值?

How to yield multiple values?

我有这样的理解:

val ao = Option(1)
val bo = Option(2)
val (x,y) = for (a <- ao; b <- bo) yield (a+b, b+a*2)

但是这不起作用。为了理解 returns Option[(Int,Int)] 但不能分配给个体 x 和 y。

如果我这样做:

val Some((x,y)) = for ...

yield None时引发异常。

如何实现这个目标?我希望 x 和 y 为 Option[Int]。我希望在不使用 x._1x.getOrElsematch

的情况下找到一个优雅的解决方案

应该unzip,但不幸的是,unzipreturnsList不是Option ]s。最短的解决方法可能是:

val pairOpt = for (a <- ao; b <- bo) yield (a+b, b+a*2)
val (x, y) = (pairOpt.map(_._1), pairOpt.map(_._2))

模式匹配不是处理选项的最佳方式吗?

val res = for (a <- ao; b <- bo) yield (a+b, b+a*2)

val (x, y) = res match {
  case Some((x, y)) => (Some(x), Some(y))
  case None => (None, None)
}

为什么不考虑 'elegant'?