Il modulo digrammi di Erlang mi ha sorpreso per lo stato di muting.Stato nei Digrafi di Erlang
Quando si tratta di altri moduli della struttura dati in Erlang, ad esempio il modulo set, l'istanza della struttura dati inoltrata, non è modificata. La funzione restituisce una nuova versione modificata, ad es.
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
Questo non è il comportamento quando si tratta con il modulo digramma.
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
In primo luogo, perché la libreria digraph è diversa sotto questo aspetto?
In secondo luogo, e ancora più importante, in che modo il modulo digraph aggiunge un nuovo stato a un binding esistente?
Suppongo che lo stato venga memorizzato in un altro processo che il modulo digraph sta identificando utilizzando il binding G. esistente e inalterato. È questo il caso? O ci sono altri modi per modificare lo stato associato a un legame?
Grazie, non riuscivo a trovare tutti i processi che sembravano avevano a che fare con digrammi. Esistono convenzioni nei moduli di erlang che indicano che lo stato viene memorizzato al di fuori del processo corrente? –
No, non penso ci sia. Ma quando ho visto il valore restituito da digraph: new() sembrava molto simile a un riferimento a qualcos'altro e il solito posto in cui memorizzare "qualcos'altro" è ets ... –
Mi ricordo che nella precedente documentazione di Digraph ets menzionato solo in doc nella parte Description, ma ora non lo è. –