基本上我有一个包含Value和Id列表的结构。 我想要做的是映射到Ids列表并发送消息给他们,但是当我第一次初始化Ids列表时,我把变量“empty_set”(也许我应该重命名为empty_list:P)。如何检查Erlang中的列表是否为空?
问题是,无论何时我调用地图函数,我想首先检查列表是否为“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表达式必须检查列表是否为空,它仍会尝试映射它。
那么我在做什么错误的表达?
谢谢
那么你基本上说的是做到这一点? 'case ViewerSet empty_list - > looper(V,ViewerSet); [_] - > set_viewer_values(V,ViewerSet)' – sokras 2014-11-02 15:34:43
我无法与活套进行模式匹配。我可以吗? – sokras 2014-11-02 15:47:47
@sokras Erlang中随处可见模式匹配的机会,你只需要练习看看它们。我在上面添加了两个例子,一个在'set_viewer_values/2'中,另一个在'looper/2'本身。 – zxq9 2014-11-03 00:11:01