【问题标题】:Generalizing a collection method概括收集方法
【发布时间】:2011-03-06 03:13:59
【问题描述】:

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

代码:

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
  }
}

【问题讨论】:

    标签: scala collections higher-kinded-types


    【解决方案1】:

    如果您只希望对支持:+ 的集合使用此功能,最简单的方法就是使用Seq 而不是List 来定义它。

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

    Scalaz applicative functors 可能是要走的路,但我会让比我有更多 Scalaz 经验的人来处理这个特定的答案。

    【讨论】:

      猜你喜欢
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2015-01-26
      • 1970-01-01
      • 2013-10-06
      • 2021-12-09
      相关资源
      最近更新 更多