gpt4 book ai didi

scala - 如何在保持不变性的同时访问 Scala 中的复杂数据结构?

转载 作者:行者123 更新时间:2023-12-02 22:36:28 24 4
gpt4 key购买 nike

调用 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。

您将如何决定最佳策略?您选择的策略有异常(exception)吗?

最佳答案

我认为实用的方法是让 Stream 实际上包含所有不同版本的数据结构,而消费者只是试图从该流中提取下一个元素。

但我认为在 Scala 中,这是一种绝对有效的方法,可以在一个中心位置进行可变引用并对其进行更改,同时您的整个数据结构保持不变。

当数据结构变得更加复杂时,您可能会对这个问题感兴趣:Cleaner way to update nested structures它询问(并得到回答)如何实际创建一个不平凡的不可变数据结构的新更改版本。

关于scala - 如何在保持不变性的同时访问 Scala 中的复杂数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com