Moduł digraphs Erlanga zaskoczył mnie mutowaniem stanu.Stan w Erlang Digraphs
Podczas pracy z innymi modułami struktury danych w Erlang, na przykład modułem zestawów, instancja przekazanej struktury danych jest niezmodyfikowana. Funkcja zwraca nową, zmienioną wersję, np.
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
Nie jest to zachowanie podczas pracy z modułem digrafu.
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
Po pierwsze, dlaczego biblioteka digrafów różni się pod tym względem?
Po drugie, a co ważniejsze, w jaki sposób moduł digraph dodaje nowy stan do istniejącego powiązania?
Zakładam, że stan jest przechowywany w innym procesie, który identyfikuje moduł digrafu przy użyciu istniejącego i niezmienionego wiązania G. Czy tak jest w tym przypadku? Czy istnieją inne sposoby modyfikacji stanu związanego z wiązaniem?
Dzięki, nie mogłem znaleźć żadnych procesów, które wyglądały tak, jakby były do czynienia z digrafach. Czy istnieją jakieś konwencje w modułach erlang, które informują, że stan jest przechowywany poza bieżącym procesem? –
Nie, nie sądzę, że istnieje. Ale kiedy zobaczyłem wartość zwracaną przez digraph: new() wyglądało to zadziwiająco jak odniesienie do czegoś innego, a zwykłe miejsce do przechowywania "czegoś innego" to ets ... –
Pamiętam, że w poprzednich dokumentach ery digrafów wspomniano tylko w dokumencie w części Opis, ale teraz tak nie jest. –