【发布时间】:2012-07-08 19:24:22
【问题描述】:
呼叫专家 Scala 开发人员!假设您有一个表示可写数据存储的大对象。您对这种常见的类似 Java 的方法感到满意吗:
val complexModel = new ComplexModel()
complexModel.modify()
complexModel.access(...)
或者你更喜欢:
val newComplexModel = complexModel.withADifference
newComplexModel.access(...)
如果您愿意,并且您有一个客户访问该模型,那么该客户的进展如何 要知道指向 newComplexModel 而不是 complexModel?从用户的角度 你有一个可变的数据存储。您如何协调这种观点与 Scala 的强调 关于不变性?
这个怎么样:
var complexModel = new ComplexModel()
complexModel = complexModel.withADifference
complexModel.access(...)
这似乎有点像第一种方法,只是 withADifference 内部的代码似乎比 modify() 内部的代码要做更多的工作,因为它必须创建一个全新的复杂数据对象而不是修改现有的。 (您是否遇到了不得不做更多工作来尝试保存的问题? 不变性?)另外,你现在有一个大范围的 var。
您将如何决定最佳策略?您选择的策略有例外吗?
【问题讨论】:
标签: scala data-structures functional-programming immutability