そこで、Erlangでメッセージパッシングのコードを書いてみた。
サンプルコード(echo.erl)
1 -module(echo).
2 -export([echo/0]).
3
4 echo() ->
5 receive
6 Msg -> io:format("~necho: ~p", [Msg]),
7 echo()
8 end.
1行目
モジュールの宣言
2行目
echo関数のエクスポート
4〜8行目が本体の関数です。メッセージを受け取り、標準出力に出力します。再帰することでなんどもメッセージを受け取るようにしています。具体的には以下。
4行目
関数の開始。関数名は"echo"。
5行目
receive式でメッセージを受け取る。
6行目
Msgにメッセージが入る。io:formatで、受け取ったMsgを標準出力に出力する。
7行目
echo関数を再帰的に呼ぶ。こうすることで、なんどもメッセージを受け取ることができる。
8行目
receive式を閉じる。
実行例
$ erl1行目
1> c(echo.erl).
{ok,echo}
2> Pid = spawn( echo, echo, [] ).
<0.40.0>
3> Pid ! "Hello!".
"Hello!"
echo: "Hello!"
echo.erlをコンパイル。
2行目
echo関数をプロセスとして呼び出し。
プロセスIDが返ってくるのでPidに入れる。
<0.40.0>は返ってきたプロセスID。
3行目
!演算子を使って、プロセスPidに"Hello!"メッセージを送る。
echo関数がメッセージを受け取り、「echo: "Hello!"」を出力する。
なお、その前の「"Hello!"」は!演算の評価結果。
0 件のコメント:
コメントを投稿