如何在结构中实现递归包含关系?
How to implement recursive inclusion relationship in a struct?
定义一个将包含自己的类型结构数据的简单结构:
defmodule MyNode do
defstruct [:parent, :child]
end
创建父子节点:
iex> p = %MyNode{}
%MyNode{child: nil, parent: nil}
iex> c = %MyNode{parent: p}
%MyNode{child: nil, parent: %MyNode{child: nil, parent: nil}}
在父节点中分配子节点:
iex> p = %{ p | child: c }
%MyNode{
child: %MyNode{child: nil, parent: %MyNode{child: nil, parent: nil}},
parent: nil
}
是的,我们陷入了无限循环。我们永远得不到合理结构的相互包含的数据。
我明白这一切的原因。但是我还有这个需求,代码应该怎么设计?
定义一个将包含自己的类型结构数据的简单结构:
defmodule MyNode do
defstruct [:parent, :child]
end
创建父子节点:
iex> p = %MyNode{}
%MyNode{child: nil, parent: nil}
iex> c = %MyNode{parent: p}
%MyNode{child: nil, parent: %MyNode{child: nil, parent: nil}}
在父节点中分配子节点:
iex> p = %{ p | child: c }
%MyNode{
child: %MyNode{child: nil, parent: %MyNode{child: nil, parent: nil}},
parent: nil
}
是的,我们陷入了无限循环。我们永远得不到合理结构的相互包含的数据。
我明白这一切的原因。但是我还有这个需求,代码应该怎么设计?