scala - 如何产生多个值?
问题描述
我有一个理解,例如:
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._1
or x.getOrElse
, ormatch
解决方案
它应该是unzip
,但不幸的是,unzip
返回List
的是 s,而不是Option
s。可能最短的解决方法是:
val pairOpt = for (a <- ao; b <- bo) yield (a+b, b+a*2)
val (x, y) = (pairOpt.map(_._1), pairOpt.map(_._2))
推荐阅读
- postgresql - 在postgresql sql中组合计数和最大值
- python-3.x - 将列表理解与 Pandas 系列和数据框一起使用
- javascript - 如何在带有 AJAX 的客户端中使用 JWT
- javascript - 如何使用jquery中的filter函数来过滤div内的一组数据?
- ruby - 如何避免通过多个方法传递相同的参数
- javascript - 如何在谷歌甘特图中添加水平滚动条?
- node.js - Puppeteer 需要很长时间才能加载页面
- cordova - 在 IONIC App 中连接 OTG Device (Pendrive) 并执行 READ/WRITE 操作
- javascript - 写入项目目录中的文件 - React Native
- javascript - Angular Universal 不呈现来自 API 请求的数据