2016-06-30 32 views
2

Ich lese in dem Buch "Eine gleichzeitige Ansatz zur Software-Entwicklung" von O'Reilly
und es gibt auf Seite 93, ein paar Beispiele für "Message Passing".Nachricht durch Variable übergeben und "direkt" in Erlang

1> Pid = self(). 
<0.30.0> 
2> Pid ! hello. 
hello 
3> <0.30.0> ! hello. 
* 1: syntax error before: '<' 

Das Problem ist, dass ich nicht verstehe, warum es einen Syntaxfehler, da, wenn ich schreibe 1> Pid. ich das Ergebnis <0.30.0> bekommen, so was ist der Unterschied zwischen der Leitung 2 machen, und Linie 3 (erwarten von die Tatsache, dass es eine Variable ist)?

+0

Mögliche Duplikat [Sende Nachricht Pid Erlang ] (http://stackoverflow.com/questions/14169931/sending-message-pid-erlang) –

+0

Ich sah diese Fragen, aber ich frage nicht, wie man eine Nachricht sendet, ich frage, warum ich nicht senden kann es in beiden Möglichkeiten –

+0

Schauen Sie sich die [dritte Antwort] (http:// Stackoverflow.com/a/14170100/409228) auf diese Frage. –

Antwort

5

Es gibt keine Syntax für wörtlichen Prozess-IDs in Erlang. Der Grund dafür ist, dass es fast nie einen Sinn ergibt: Der Prozess, den Sie am wahrscheinlichsten erreichen möchten, hat jedes Mal eine andere PID, wenn Ihr Programm läuft.

Normalerweise spawnen Sie einen Prozess, speichern den Rückgabewert spawn in einer Variablen und verwenden dann diese Variable, um mit dem Prozess zu interagieren.

Wenn Sie wirklich ein brauchbares pid aus seiner String-Darstellung erhalten möchten, können Sie die Funktion list_to_pid oder pid verwenden, um eine pid von den gedruckten Komponenten zu erhalten:

list_to_pid("<0.30.0>") 
pid(0,30,0) 
+3

In Bezug auf Ihren letzten Satz würde ich auch die mögliche Verwendung von 'pid (0,30,0)' zum Beispiel hinzufügen. –

+0

@ A.Sarid Guter Punkt! Hinzugefügt. – legoscia