Я новичок в 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],
Насколько я понимаю, я неправильно передаю сообщение: / Что я делаю неправильно?