【发布时间】:2011-11-10 15:25:06
【问题描述】:
我正在尝试为需要在不同时间等待多次更新的应用的一部分创建通用接收。
这是它不工作的原型。
receive_info([])->[];
receive_info([RequiredInfo|RestRequiredInfos]) ->
receive
RequiredInfo -> [ RequiredInfo | receie_info(RestRequiredInfos)];
end.
它被称为
[UserInfo, ContextInfo] = receive_info([#userinfo{},#contextinfo{}]),
所以,我正在尝试发送一个应该匹配的记录类型列表,并且我希望收到一个记录列表。
不确定这是否可行,因为记录将其字段设置为未定义并且模式匹配不起作用,例如:
Trying to receive {user_info,undefined}
Other clause: instead {user_info,12} received
编辑:
由于@Adam Lindberg 提供的is_record 版本对我不起作用,我遵循了同样的做事方式,最终得到:
receive_infos([]) -> [];
receive_infos([Rec|Records]) ->
receive
%% Guard expression that compares first element in record with supplied record tag
Record when element(1, Record) =:= Rec ->
[ Record | receive_infos(Records)]
end.
【问题讨论】:
标签: functional-programming erlang pattern-matching