Erlang - 模式匹配谓词

时间:2014-06-05 15:04:11

标签: erlang pattern-matching

要知道特定表达式是否与指定模式匹配,我可以在erlang中编写如下内容:

case <expression> of
    <pattern> -> true;
    _ -> false
end

例如:

case {1, 2, 3} of
    {_, 2, _} -> true;
    _ -> false
end

有没有办法以更紧凑的方式编写它?类似的东西:

is_match(<pattern>, <expression>)

2 个答案:

答案 0 :(得分:8)

不,没有这样的结构。您可以定义一个宏来执行此操作:

-define(is_match(Pattern, Expr), case Expr of Pattern -> true; _ -> false end).

答案 1 :(得分:0)

另一个宏:o)-define (IS_MATCH(PAT,EXP), catch(PAT = EXP) == EXP end).没有任何案例,但我不确定捕获是否更好。