掌握Erlang消息

时间:2018-11-06 12:08:58

标签: erlang

我仍在尝试处理Erlang消息,并且在处理它时,我想到了这种情况。似乎应该可以使用,但是它会无限期地挂起。

更习惯Erlang的人可以解释我做错了什么吗?是的,我知道我什至不看返回的内容。这是尝试减少代码以找出问题的结果。

-module(test).
-export([caller/2]).

callee(V1, V2, From) ->
  From ! {V1, V2}.

caller(V1, V2) ->
  spawn(fun() ->
    callee(V1, V2, self()) end),
  receive
    _ ->
      {V1, V2}
  end.

2 个答案:

答案 0 :(得分:1)

如果将self()的结果分配给变量 outside ,则该函数将调用spawn,然后传递该变量而不是文字{{1} },那么在self()中发送的消息将被正确发送到运行callee的进程(正在等待caller的进程)。

答案 1 :(得分:1)

此位将帮助您了解问题出在哪里。

1> Self = self(), spawn(fun() -> io:format("Self: ~p, self():~p ~n", [Self, self()]) end).
Self: <0.83.0>, self():<0.85.0> 
<0.85.0>