我以前做过类似的事情,但方式不同。我也需要检查表达式的结果。我的技巧的好处是您不需要自己检查,模式匹配会为您完成。诀窍的关键是使用lists:foldl。下面是一个例子。
check_group(Community_code,Category_code,Group_code) ->
Group = dis_scan:get_group_item(Community_code,Category_code,Group_code),
StartItems = [ start_item(Community_code,Category_code,Item_seq_no)
|| {_, _, Item_seq_no } <- Group ],
ok = lists:foldl(fun check_start_item/2, ok, StartItems),
exit(normal).
check_start_item(StartItem, ok) ->
## Return ok if item is ok, {error, Reason} otherwise.
ok.
另一方面,如果您需要根据检查返回的结果对项目进行分组,则使用列表:分区。
check_group(Community_code,Category_code,Group_code) ->
Group = dis_scan:get_group_item(Community_code,Category_code,Group_code),
StartItems = [ start_item(Community_code,Category_code,Item_seq_no)
|| {_, _, Item_seq_no } <- Group ],
{GoodItems, BadItems} = lists:partition(fun check_start_item/1, StartItems),
case BadItems of
[] -> exit(normal);
_ -> error({bad_start_items, BadItems})
end.
check_start_item(StartItem) ->
## Return true if item is ok, false otherwise.
true.