0
我有一個函數,它將一個值設置爲一個進程Pid,我可以讓一個進程依賴於另一個進程。所以如果我爲進程設置一個值,那麼我也必須將值設置爲依賴它的進程。但是,如果在進程之間有一個圓圈,那麼我想返回一條錯誤消息。如何檢查一個Pid是否是Erlang中的Pid列表的成員?
我嘗試通過傳遞一個已經更改值的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}]}]}
據我瞭解,我給壞的參數列表:成員函數。 我該怎麼辦?
感謝
感謝創造出一些模式匹配原來我所有:) – sokras 2014-11-02 18:48:14
它發生後調用'empty_list' :)請記住,您可以在'[]'上模式匹配,因此不需要'empty_list'抽象。你可以嘗試使用[dialyzer](http://www.erlang.org/doc/apps/dialyzer/dialyzer_chapter.html),這可能會提醒你這種類型錯誤。 – mpm 2014-11-02 20:33:14