2016-06-30 1 views
2

O'Reillyの「A Concurrent Approach to Software Development」の
を読んで、93ページに「メッセージの受け渡し」の例がいくつかあります。メッセージは変数で渡され、erlangでは "direct"

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

問題は構文エラーがあるなぜ私が1> Pid. を入力したとき、私は結果<0.30.0>を取得するので、私は、理解していないということですので、のは、ライン2、ライン3との違いを作るもの(に期待それが変数であるという事実)?

+0

[送信メッセージはPidアーランの可能性のある重複](http://stackoverflow.com/questions/14169931/sending-message-pid-erlang) –

+0

私はこの質問を見ましたが、私はメッセージを送信する方法を尋ねていません、なぜ私は送信できないのですかそれは両方の方法で –

+0

その質問の[第三の答え](http://stackoverflow.com/a/14170100/409228)を見てください。 –

答えて

5

ErlangでリテラルのプロセスIDの構文はありません。その理由は、ほとんど意味をなさないということです。プログラムに実行するたびに、到達したいプロセスには異なるpidがあります。

通常、プロセスを生成し、戻り値spawnを変数に保存し、その変数を使用してプロセスと対話します。

あなたは本当に、その文字列表現から使用可能なPIDを取得したい場合は、あなたが印刷されたコンポーネントからPIDを取得する機能list_to_pid、またはpidを使用することができます。

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

最後の文については、例えば 'pid(0,30,0)'の使用法を追加します。 –

+0

@A.Sarid良い点!追加されました。 – legoscia

関連する問題