Scala 从功能上修改集合属性的最佳实践

Scala 从功能上修改集合属性的最佳实践,scala,functional-programming,immutability,Scala,Functional Programming,Immutability,我很好奇如何实现一个遵循严格函数式编程规则的类 例如,如果我有一个具有两个属性的类,并且我有一个修改它们的方法,我将如何进行修改?属性将是私有VAL,并且该方法必须在每次修改该属性时返回该属性的新实例。这很好,只是我想控制它,这意味着我需要一种设置val的方法 做这件事的最好方法是什么,这样我就不会有成千上万的实例,比如说,一个集合,在内存中浮动?这是我的观点,但是;就像case类一样,我会在类上实现一个copy方法,以使修改成为可能,同时保持不变性,但也存在一些情况,我无法帮助使其可变;例如,

我很好奇如何实现一个遵循严格函数式编程规则的类

例如,如果我有一个具有两个属性的类,并且我有一个修改它们的方法,我将如何进行修改?属性将是私有VAL,并且该方法必须在每次修改该属性时返回该属性的新实例。这很好,只是我想控制它,这意味着我需要一种设置val的方法


做这件事的最好方法是什么,这样我就不会有成千上万的实例,比如说,一个集合,在内存中浮动?

这是我的观点,但是;就像case类一样,我会在类上实现一个copy方法,以使修改成为可能,同时保持不变性,但也存在一些情况,我无法帮助使其可变;例如,当某个内容预计会使复制操作对类来说太大和太慢时;比如,当类有这么多频繁修改的成员时。而且,不要担心内存中会有数千个实例浮动,因为它们是自动GC’ed的,所以更实际的问题是复制类实例的时间开销。如果我的意见有什么错误,请告诉我:

这对我来说很有意义。您知道如何执行不可变集合的浅层复制吗?只需使另一个变量引用同一对象即可。如果要将变量a浅层复制到b,则写入val b=a。如果您指的是深度复制,那么它毫无意义,但如果是Seq,则执行类似val b=Seq.empty++a的操作: