基本的に、値と ID のリストを含む構造があります。私がやりたいのは、IDのリストをマップしてそれらにメッセージを送信することですが、IDのリストを最初に初期化するときに、変数「empty_set」を配置します(名前をempty_listに変更する必要があるかもしれません:P)。
問題は、マップ関数を呼び出すたびに、リストが「empty_set」であるかどうかを最初に確認し、そうでない場合はマップ関数を使用することです。コードは次のとおりです。
{From, set_value, V} ->
if ViewerSet /= empty_set -> set_viewer_values(V, ViewerSet)
end,
looper(V, ViewerSet)
呼び出される関数は次のとおりです。
set_viewer_values(Value, ViewerSet) ->
if ViewerSet /= empty_set ->
lists:map(fun(ViewerPid) ->
ViewerPid ! {self(), set_value, Value} end, ViewerSet)
end.
これは私がプロセスを開始する方法です:
process() ->
C = spawn(fun() -> looper(no_value, empty_set) end),
{ok, C}.
問題は、実行すると次のエラーが発生することです。
=ERROR REPORT==== 2-Nov-2014::15:03:07 ===
Error in process <0.367.0> with exit value: {function_clause,[{lists,map,
[#Fun<sheet.2.12938396>,empty_set],[{file,"lists.erl"},{line,1223}]},{lists,map,2,
[{file,"lists.erl"},{line,1224}]},{sheet,cell_loop,2,[{file,"sheet.erl"},{line,93}]}]}
私が理解していることから、リストが空かどうかを確認する必要がある if 式にもかかわらず、リストをマップしようとします。
では、表現のどこが間違っているのでしょうか。
ありがとう