2

同一事物的这两个示例之间是否有一些权衡?

我的偏见是始终使用函数式样式,但是如果我运行数十亿个这样foldLeft的 s,是否为每个列表中的每一步创建一个新FunctionalA的比仅更新 a 效率低var

一个通用的值集合:

case class B(b: Int)
val bb = (1 to 20).toList.map(B(_))

命令式折叠:

class ImperativeA {
  var a = 0
  def ingest(x: B): Unit = a += x.b
}

val imperative_fold = 
  bb.foldLeft(new ImperativeA)((a,b) => {a ingest b; a} )

imperative_fold.a // 210

折叠功能:

class FunctionalA(val a: Int = 0) {
  def ingest(x: B) = new FunctionalA(a + x.b)
}

val functional_fold = 
  bb.foldLeft(new FunctionalA())(_ ingest _)

functional_fold.a // 210
4

0 回答 0