在同一件事的这两个例子之间是否有一些权衡?
我的偏见是始终使用功能样式,但如果我运行数十亿这些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) %>%