不可变数据结构中的循环引用

时间:2013-02-14 14:24:43

标签: data-structures immutability

我正在尝试创建一个不可变的dat结构,这是一个任务列表。 我希望每个任务都有一个对列表的引用,列表将返回所有任务并具有当前任务属性。

问题是如何从任务到列表以及从列表到任务的循环引用仍然具有不可变的数据结构?

如果我首先创建任务,我就无法引用该列表,因为它尚不存在,如果我走另一条路 - 首先创建列表我将不得不更改它以便向其添加任务

谢谢你, IDO。

2 个答案:

答案 0 :(得分:2)

我很确定你可以创建列表,并在构造函数中构造列表项,同时将列表作为参数传递给它们。

的伪代码:

List constructor:
  List()
  {
    for each item to add
      add(new Item(this));
  }

Item constructor:
  Item(List list)
  {
    this.list = list;
  }

然而,这会破坏模块化,因为列表构造函数必须处理创建项目的所有逻辑。

答案 1 :(得分:0)

您不能同时创建列表和任务,因此您必须先创建一个列表和任务。在某些时候,你从一个空列表开始(例如在列表的构造函数中,或在其他地方)。

给定空列表,您可以创建任务:例如,在列表的构造函数中,或列表中的方法。您可以将对列表的引用传递给任务的构造函数。然后将任务添加到列表中,这样列表就会引用该任务。