scala – 概括一个集合方法

如果我想将以下方法推广到支持所有必要操作的所有集合类型(foldLeft,flatMap,map和:),那么我该怎么做呢?目前它只适用于列表.

码:

def join[A](lists: List[List[A]]): List[List[A]] = {
  lists.foldLeft(List(List[A]())) { case (acc, cur) =>
    for {
      a <- acc
      c <- cur
    } yield a :+ c
  }
}

最佳答案 如果您只想要支持:的集合,最简单的方法就是用Seq而不是List来定义它.

通过使用构建器,您可以使它更加通用,一直到Traversable.我很乐意解释说,当我有更多的时间在我的手上,但它往往在那个级别变得复杂.

Scalaz applicative functor可能是要走的路,但我会让拥有更多Scalaz经验的人比我处理那个特定的答案.

点赞