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 来识别该进程。是这样吗?或者还有其他方法可以修改与绑定相关的状态吗?

有帮助吗?

解决方案

  1. 可能是为了效率
  2. 它使用 ETS 来存储有向图。new 的返回值实际上是对 ets 表的引用。

运行工具栏:start()。从您的 erlang shell 并打开表可视化应用程序 - 您将看到有向图实用程序的一组 ets 表。

edges
vertices
neighbours

digraph:new 调用的返回值中的值是这些表的 ets 表 id...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top