erlang 以编程方式使用模式匹配

inb24sb2  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(147)

是否可以通过编程方式进行模式匹配?

Pattern = {error, '_'},
IsError = 
    case {error, "foo"} of
        Pattern -> true;
        _ -> false
    end.

我知道我可以用宏来做这件事,但是我有一个动态的模式列表,我想匹配这些模式,而这些模式事先并不知道。

nukf8bse

nukf8bse1#

也许最接近的方法是使用编译后的match specification,方法是调用函数ets:match_spec_compileets:match_spec_run

MS = ets:match_spec_compile([{{error, '_'}, [], ['$_']}]).
Items = [ok, {error, foo}, {error, bar}].
ets:match_spec_run(Items, MS).

这会传回Items清单中符合的两个项目:

[{error,foo},{error,bar}]

相关问题