【发布时间】:2014-10-05 23:09:50
【问题描述】:
我是 Erlang 新手,我正在尝试让 Pid 向其他几个 Pid 发送消息。
我有一个函数,它接受一个 Pid、一个字符串(消息)和一个整数 R(半径)作为参数。
broadcast(P, M, R) ->
P ! {self(), friends},
receive
{P, Friends} ->
[F ! {{broadcast, P, M, R}, Friends} || F <- Friends],
ok;
{} ->
end.
我有这个等待接收新消息的监听函数:
looper({Name, Friends, Messages}) ->
receive
{From, friends} ->
From ! {self(), Friends},
looper({Name, Friends, Messages});
{{broadcast, ID, M, R}, Friends} ->
% From ! {From, {self(), {ID, M}}},
looper({Name, Friends, [{ID, M} | Messages]});
terminate ->
ok
end.
当我调用函数广播时,我收到以下消息:
faceinsok:broadcast(Pid, "asd", 1).
** exception error: bad argument
in function faceinsok:'-broadcast/3-lc$^0/1-0-'/5 (faceinsok.erl, line 56)
第 56 行是:
[F ! {{broadcast, P, M, R}, Friends} || F <- Friends],
据我了解,我没有正确传递消息:/ 我做错了什么?
【问题讨论】:
-
"Improved" code 不同的错误信息,所以我不认为它可以被视为重复
-
你没有广播问题,你有模式匹配/类型问题。
标签: erlang erlang-shell