什么是在Scala中执行数百万个独特转换的函数方法



我有一个对象Person,这个对象经历了数百万次独特的转换,这些转换必须按顺序进行。

传统上,我可以这样做:

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

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

您可以使用函数组合

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

一种方法是将所有转换放入序列(或Buffer或List或..)中,然后应用

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

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

fp方法不会节省内存消耗/对象生成。但是,正如评论者所指出的,这些对象在堆中,寿命很短,并且很容易被垃圾收集器管理/消耗。

最新更新