基本上我有一个结构,其中包括一个值和一个 ID 列表。我想要做的是映射 Id 列表并向他们发送消息,但是当我第一次初始化 Id 列表时,我放置了变量“empty_set”。(也许我应该将它重命名为 empty_list :P)。
问题是,每当我调用 map 函数时,我首先要检查列表是否为“empty_set”,如果不是,则使用其中的 map 函数。这是代码:
{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 表达式我必须检查列表是否为空,但它仍会尝试映射它。
那么我在表达上做错了什么?
谢谢