【问题标题】:Getting to grips with Erlang messages掌握 Erlang 消息
【发布时间】:2018-11-06 12:08:57
【问题描述】:

我仍在尝试处理 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.

【问题讨论】:

  • 尝试将调用移至衍生进程之外的self()
  • 谢谢,非常有道理!您可以将其发布为答案吗?

标签: erlang


【解决方案1】:

如果您将self() 的结果分配给一个变量外部 调用spawn 中的函数,然后传入该变量而不是文字self(),然后发送的消息callee 将正确地发送到运行 caller 的进程(正在等待 receive 的进程)。

【讨论】:

    【解决方案2】:

    这一点将帮助您了解问题出在哪里。

    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>
    

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2021-10-09
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多