题
Erlang 有向字母模块的状态变化让我感到惊讶。
当处理Erlang中的其他数据结构模块时,例如sets模块,传入的数据结构的实例是未修改的。该函数返回一个新的、更改的版本,例如
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
这不是处理有向图模块时的行为。
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
首先,为什么有向图库在这方面有所不同?
其次,更重要的是,有向图模块如何针对现有绑定添加新状态?
我假设状态存储在另一个进程中,有向图模块使用现有且未更改的绑定 G 来识别该进程。是这样吗?或者还有其他方法可以修改与绑定相关的状态吗?
解决方案
- 可能是为了效率
- 它使用 ETS 来存储有向图。new 的返回值实际上是对 ets 表的引用。
运行工具栏:start()。从您的 erlang shell 并打开表可视化应用程序 - 您将看到有向图实用程序的一组 ets 表。
edges
vertices
neighbours
digraph:new 调用的返回值中的值是这些表的 ets 表 id...
不隶属于 StackOverflow