scala - 是否可以将 canBuildFrom 传递给理解?
问题描述
我想避免使用 zipped 来创建中间序列,例如:
def flat(as: Seq[Int], bs: Seq[Int], cs: Seq[Int], ds: Seq[Int]): Seq[Int] = for{
(a,b) <- (as, bs).zipped
(c,d) <- (cs, ds).zipped
} yield a + b + c + d
但是 zipped (Tuple2Zipped) flatMap 默认返回 Traversable,而不是 Seq。如果我使用显式 map 和 flatMap 编写相同的代码,我可以给它合适的 canBuildFrom 来输出 Seq。
那么,理解者如何为 flatMap 选择 canBuildFrom 以及是否可以告诉它使用哪一个?
解决方案
只需在括号中breakOut
的 -comprehension 之后立即附加:for
def flat(as: Seq[Int], bs: Seq[Int], cs: Seq[Int], ds: Seq[Int])
: Seq[Int] = (for{
(a,b) <- (as, bs).zipped
(c,d) <- (cs, ds).zipped
} yield a + b + c + d)(collection.breakOut)
CanBuildFrom
这适用于您想要的任何其他内容。
推荐阅读
- javascript - 从 MVC .Net 核心控制器读取 JSON 时出现问题
- python - 无法让新的 Scrapy 项目导出器工作
- spring-boot - 为什么在 Spring Authorization Server 示例代码中配置两个 formLogin
- javascript - 打字稿:嵌套对象的深度键,具有相关类型
- recursion - 谁能帮我学习这个函数如何在 node.right == None 之后继续执行 node.left 部分?这是 BST 中的 kLargest 元素
- scheme - GIMP Script-Fu:“错误:<:参数 1 必须是:数字”
- react-native - React Native - 在渲染任何东西之前调用函数
- google-cloud-platform - 使用python api根据上次修改日期字段对谷歌云存储中的blob进行排序
- javascript - 如何对 dayjs() 时间进行排序?
- javascript - 启用屏幕阅读器时,键盘选项卡不起作用