首页 > 解决方案 > 是否可以将 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 以及是否可以告诉它使用哪一个?

标签: scalafor-comprehension

解决方案


只需在括号中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这适用于您想要的任何其他内容。


推荐阅读