Estado em Erlang DiDraphs
-
21-09-2019 - |
Pergunta
O módulo Erlang DiDraphs me surpreendeu ao mutar o estado.
Ao lidar com outros módulos de estrutura de dados em Erlang, por exemplo, o módulo Sets, a instância da estrutura de dados passada, não é modificada. A função retorna uma nova versão alterada, por exemplo
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
Este não é o comportamento ao lidar com o módulo DiDraph.
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
Em primeiro lugar, por que a Biblioteca DiGraph é diferente nesse aspecto?
Em segundo lugar, e mais importante, como o módulo DiDraph está adicionando um novo estado contra uma ligação existente?
Suponho que o estado esteja sendo armazenado em outro processo que o módulo DiDraph está identificando usando a ligação existente e inalterada G. Esse é o caso? Ou existem outras maneiras de modificar o estado associado a uma ligação?
Solução
- Provavelmente para eficiência
- Está usando o ETS para armazenar o díadera. O valor de retorno dos novos são realmente referências às tabelas do ETS.
Executar barra de ferramentas: start (). No seu shell Erlang e abra o aplicativo Visualizador de tabela - você verá um conjunto de tabelas ETS para o utilitário DiDAPH.
edges
vertices
neighbours
Os valores no valor de retorno do DiDraph: nova chamada são os IDs da tabela Ets dessas tabelas ...