【发布时间】:2014-11-03 01:49:57
【问题描述】:
我有一个为进程 Pid 设置值的函数,我可以让一个进程依赖于另一个进程。因此,如果我为进程设置一个值,那么我还必须为依赖它的进程设置该值。但是,如果进程之间有一个圆圈
i.e. A depends on B and B depends on A
那我想返回一个错误信息。
我尝试通过传递一个已经更改值的 Pid 列表来做到这一点,这样如果我两次遇到相同的 Pid(通过检查它是否是 Pid 列表的成员),那么整个函数就会停止。这是我的代码:
set_values(Pid, Value, PidSet, PidList) ->
case lists:member(Pid, PidList) of
false -> io:format("Setting Value~n"),
lists:map(fun(Pid) ->
Pid ! {self(), set_value, Value, [Pid | PidList]} end, PidSet);
true -> io:format("circle_detected~n"),
Pid ! {circle_detected}
end.
当我运行它时,我得到了这个错误:
=ERROR REPORT==== 2-Nov-2014::17:47:45 ===
Error in process <0.888.0> with exit value: {badarg,[{lists,member,
[<0.888.0>,empty_list],[]},{process,set_viewer_values,4,[{file,"process.erl"},{line,56}]},
{process,looper,2,[{file,"process.erl"},{line,116}]}]}
据我了解,我给 lists:member 函数提供了错误的论据。 我该怎么办?
谢谢
【问题讨论】:
标签: erlang erlang-shell