命令式与功能性数据结构权衡

时间:2016-08-17 16:27:12

标签: scala functional-programming imperative-programming foldleft

在同一件事的这两个例子之间是否有一些权衡?

我的偏见是始终使用功能样式,但如果我运行数十亿这些FunctionalA,则为每个列表中的每个步骤创建一个新的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

功能性折叠:

dySeries("meanOfMeans",strokeWidth = 4) %>%

0 个答案:

没有答案