首页 > 解决方案 > 如何产生多个值?

问题描述

我有一个理解,例如:

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

但是,这不起作用。对于理解返回Option[(Int,Int)]但不能分配给单个 x 和 y。

如果我做:

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

当 yield None 时会导致异常。

如何实现这个目标?我希望 x 和 y 成为Option[Int]. 我希望找到一个优雅的解决方案而不使用 like x._1or x.getOrElse, ormatch

标签: scalapattern-matchingoption

解决方案


应该unzip,但不幸的是,unzip返回List的是 s,而不是Options。可能最短的解决方法是:

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

推荐阅读