什么是在Scala中执行数百万次独特转换的功能方法?

时间:2016-05-14 02:13:15

标签: scala functional-programming

我有一个对象Person,这个对象经历了数以百万计的独特转换,这些转换必须按顺序完成。

传统上,我可以这样做:

var bob = new Person()
birth(bob)
oneYearOld(bob)
middleSchool(bob)
highSchool(bob)
// ...million more transformations

所以我的问题是,如何在Scala中实现功能(无副作用/纯函数)?如果我使用val bob,我是否会创建数百万的bob副本,这可能会导致内存问题?

1 个答案:

答案 0 :(得分:5)

您可以使用function composition

i(h(g(f(bob))))

执行此操作的一种方法是将所有转换放入序列(或缓冲区或列表或..)中,然后应用它们

val finalBob = functionsSeq.foldleft(bob) { case (xformBob, fn) => fn(xformBob) }

功能组合是为了表达和优雅的清晰。每个转换都将涉及从(不可变的)现有实例生成一个新实例:这是纯函数式编程的主要目标。

fp方法不会为您节省内存消耗/对象生成。但是 - 正如评论者所指出的那样 - 这些对象在堆上,短暂存在,并且易于被垃圾收集器管理/使用。