に私はLearnYouSomeErlangを読んでいると、以下のコードが見つかりました:アーラン:Ref` `の使用は、クエリと応答
私の質問は、なぜ私たちはevent
機能でRef
が必要なのかということですが。 理由は、Ref
はrequest-idと似ていると思います。
複数のリクエストをdont_give_crap
に送信し、返信が返された場合は、Ref
がどのIDであるかを教えてくれます。
しかし、event
がブロックされていて、1つのリクエストを送信しているため、同じプロセスから複数のリクエストをdont_give_crap process
に送信できますか? Ref
の目的は何ですか?
-module(cat_fsm).
-export([start/0, event/2]).
start() ->
spawn(fun() -> dont_give_crap() end).
event(Pid, Event) ->
Ref = make_ref(), % won't care for monitors here
Pid ! {self(), Ref, Event},
receive
{Ref, Msg} -> {ok, Msg}
after 5000 ->
{error, timeout}
end.
dont_give_crap() ->
receive
{Pid, Ref, _Msg} -> Pid ! {Ref, meh};
_ -> ok
end,
io:format("Switching to 'dont_give_crap' state~n"),
dont_give_crap().