Das Erlang-Digraphen-Modul überraschte mich durch einen mutierenden Zustand.Zustand in Erlang Digraphen
Wenn Sie mit anderen Datenstrukturmodulen in Erlang arbeiten, z. B. mit dem Mengenmodul, ist die Instanz der übergebenen Datenstruktur unverändert. Die Funktion gibt eine neue, geänderte Version z.
>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
Dies ist nicht das Verhalten beim Umgang mit dem Digraphenmodul.
>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
Erstens, warum ist die Digraph-Bibliothek in dieser Hinsicht anders?
Zweitens, und noch wichtiger, wie fügt das Digraph-Modul einen neuen Zustand gegen eine bestehende Bindung hinzu?
Ich gehe davon aus, dass der Status in einem anderen Prozess gespeichert wird, den das Digraph-Modul mit der vorhandenen und unveränderten Bindung G identifiziert. Ist das der Fall? Oder gibt es andere Möglichkeiten, den Status einer Bindung zu ändern?
Danke, ich keine Prozesse finden konnte, die sie sahen aus wie mit Digraphe zu tun haben. Gibt es in Erlang-Modulen Konventionen, die Ihnen mitteilen, dass der Status außerhalb des aktuellen Prozesses gespeichert wird? –
Nein, ich glaube nicht, dass es da ist. Aber als ich den Rückgabewert von digraph: new() sah, sah es bemerkenswert wie ein Verweis auf etwas anderes aus und der übliche Ort, um "etwas anderes" zu speichern, ist ets ... –
Ich erinnere mich, dass in früheren Digraph-Dokumenten ets nur erwähnt wurde in Doc in Beschreibung Teil, aber jetzt ist es nicht. –