コードによって生成されるエラーは次のとおりです。
2> X = "2".
"2"
3> case_:main(X).
main 50
sender 50
** exception error: bad argument
in function case_:sender/1 (case_.erl, line 14)
in call from case_:main/1 (case_.erl, line 6)
4> Z = 2.
2
5> case_:main(Z).
** exception error: bad argument
in function io:format/3
called as io:format(<0.25.0>,"main ~p~n",2)
in call from case_:main/1 (case_.erl, line 5)
6>
最初の試行では、整数を渡す2回目の試行よりもはるかに遠くなる文字列を渡そうとしました。なぜこれが機能しないのかわかりません。
関数呼び出しは、関数呼び出しからsender(Input)
戻る必要があります。{Data}
receiver()
メッセージを受け取り、それらを評価して結果を返すループを作成しようとしているので、プログラムのメッセージパッシング部分が絶対に必要です。しかし、おそらくcase...of
ステートメントは破棄される可能性があります。
-module(case_).
-export([main/1, sender/1, receiver/0]).
main(Input) ->
io:format("main ~p~n",Input),
case sender(Input) of
{Data} ->
io:format("Received ~p~n",Data)
end.
sender(Input) ->
io:format("sender ~p~n",Input),
Ref = make_ref(),
?MODULE ! { self(), Ref, {send_data, Input}},
receive
{Ref, ok, Data} ->
{Data}
end.
receiver() ->
io:format("receiver ~n"),
receive
{Pid, Ref, {send_data, Input}} ->
Pid ! { Ref, ok, Input + Input}
end.