呼叫专家 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。
您将如何决定最佳策略?您选择的策略有例外吗?