Erlang digraphs 模块通过改变状态让我感到惊讶。
在处理 Erlang 中的其他数据结构模块时,例如 sets 模块,传入的数据结构的实例是未修改的。该函数返回一个新的更改版本,例如
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
这不是处理 digraph 模块时的行为。
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
首先,为什么有向图库在这方面有所不同?
其次,更重要的是,有向图模块如何针对现有绑定添加新状态?
我假设状态被存储在另一个进程中,digraph 模块正在使用现有且未更改的绑定 G 进行标识。是这种情况吗?或者还有其他修改与绑定相关的状态的方法吗?