【发布时间】:2014-03-07 18:54:37
【问题描述】:
我已经用 Scala 试验了一段时间,并且经常遇到支持不可变数据结构的建议。
但是当你有一个数据结构时,例如3D 场景图、大型神经网络或任何需要频繁更新的对象(动画场景中的对象、训练神经网络……),这似乎是
运行时效率极低,因为您需要不断地重新创建整个对象图,并且
难以编程,因为当您引用一些需要更新的对象时,您不能只调用它们的 setter,而是需要复制对象图并用更新的对象替换旧对象。
在惯用的 Scala 中如何处理这些事情?
【问题讨论】:
-
1.不可变数据结构通常允许在不复制整个数据的情况下进行更新。 2. 你听说过镜头吗? (可能相关:stackoverflow.com/questions/3900307/…)
-
@GáborBakos 1. 实际上,这样的结构是不可变数据结构的子集,被命名为persistent 并且一些内置的 scala 集合是持久的(例如 List) 2. 即使镜头是一根魔杖, 没有正确的拼写 use lens 是有点无用的提示
-
@om-nom-nom 感谢您的评论。我希望堆栈溢出链接提供了如何使用镜头的想法。老实说,我很好奇这些镜片对她/他不起作用,或者只是不为人知。我希望我的评论没有冒犯性,在这种情况下我道歉。
-
没有冒犯,没有冒犯,只是注意到镜头是一种更容易更新嵌套结构的方法,但对于图形,仍然可能 i> 很笨拙
-
@GáborBakos 我听说过 lensens,但是 1) 希望这种相当普遍的情况不需要也依赖于宏的(相当复杂的)解决方案 2) 认为对于图形结构,它们对第二个问题没有多大帮助,3)认为他们对第一个问题根本没有帮助。另外,当然我知道不可变数据结构不需要完整的深拷贝,但至少您需要为要更新的对象以及引用其中一个的每个对象创建新对象,依此类推。否则它们就不会真正是不可变的。
标签: scala data-structures immutability