如何在Scala中初始化和“修改”循环持久数据结构?
|
我已经搜索并找到了有关此主题的一些信息,但答案令人困惑或不适用。
我有这样的事情:
class Thing (val name:String, val refs:IndexedSeq[Ref])
class Ref (val name:String, val thing:Thing)
现在,我想说的是,加载文件,解析文件并从中填充此数据结构。它是不可变且循环的,怎么可能呢?
另外,假设我确实填充了此数据结构,现在我想对其进行修改,例如更改rootThing.refs(3).name,那怎么做?
感谢您在此处发布的想法。在这一点上,我正在考虑,如果人们真的想要像这样的持久性数据结构,那就跳出思路,考虑一下客户端代码需要提出的问题。因此,与其考虑对象和字段,不如考虑查询,索引等。首先,我在考虑以下方面:
是否存在双向多图持久数据结构?
没有找到相关结果
已邀请:
4 个回复
蜂佬渺
但是,显然,对于多对多连接而言,这变得很复杂。 我不知道是否存在通用的纯功能循环图数据结构。使用无环图,这很容易,因为您可以对其进行拓扑排序,然后逐步对其进行初始化。 也许使用间接寻址是您的一种选择,比如说通过标识符而不是实际的scala对象引用来引用对象?
然后,您可以在加载文件后通过ID将事物收集到不可变的映射(例如
)中,并从引用中查找时进行查找。 编辑 Miles是关于ѭ4的第一种情况的。确实,您需要像他的回答中那样使用名字参数。
浆错
但是,您不能使其持久化:由于是周期性的,任何更改都可以通过结构的每个元素看到,因此没有机会在版本之间进行共享。
公藕
如果您考虑一下,则此方法类似于关系数据库的工作方式。表之间的多值关联不存储在行本身中,而是存储在单独的索引中。即使不存在关联索引,因此使用表扫描来解决查询时,它也使用主键索引来定位结果的所有候选行。 这种样式的优点是可以在不影响对象本身的情况下添加或更改关联,并且可以将不同的关联应用于不同的受众/用例。缺点是在关联开始的实例上不能直接访问关联图;它必须被传递并单独提供。
臂哦