我的理解力很强:
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 ...
当产生None时会导致异常。
如何实现这一目标?我希望x和y为Option[Int]
。我希望找到一种优雅的解决方案,而不必使用x._1
或x.getOrElse
或match
答案 0 :(得分:2)
应该是unzip
,但不幸的是,unzip
返回List
,而不是Option
。可能最短的解决方法是:
val pairOpt = for (a <- ao; b <- bo) yield (a+b, b+a*2)
val (x, y) = (pairOpt.map(_._1), pairOpt.map(_._2))
答案 1 :(得分:0)
模式匹配不是处理选项的最佳方法吗?
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)
}
为什么不将其视为“优雅”?