Sched_ents
是l1_dl_se
类型的记录列表,其中dci
作为其元素/字段名称之一,它本身是不同类型的记录,其中一种类型是l1_format0
。我正在尝试查看列表dci
中的任何记录中是否存在l1_format0
类型的Sched_ents
条记录。如果列表中的任何记录中都有此类成员,则返回x=1
,否则x=2
。
我尝试使用list:keymember as:
case lists:keymember(l1_format0,#l1_dl_se.dci,Sched_ents) of
true -> X=1;
false -> X=2
end
答案 0 :(得分:1)
根据评论,我认为你正在寻找这样的东西:
case [ X || X <- Sched_ents,
is_record(X, l1_dl_se),
is_record(X#l1_dl_se.dci, l1_format0)] of
[] -> 2; %% none found
_List -> 1 %% One or more found
end
列表理解为您提供的列表仅包含Sched_ents
中#l1_dl_se
条记录中包含#l1_format0
记录的元素。
答案 1 :(得分:0)
您应该使用进行短路评估的lists:any/2
:
F = fun(#l1_dl_se{dci = #l1_format0{}}) -> true; (_) -> false end,
case lists:any(F, Sched_ents) of
true -> X = 1;
false -> X = 1
end
使用erlang:is_record/2
也可以正常使用
F = fun(X) -> is_record(X, l1_dl_se) andalso is_record(X#l1_dl_se.dci, l1_format0) end,