Erlang解析多个参数

时间:2014-12-29 20:08:43

标签: erlang

我有一个简单的记录

#client{level}

级别可以是:user / superUser / manager / admin

我希望只有当level是manager和admin时才接受该函数。 如何将其缩小为只有一个:

parse(Client = #client{level=manager}) ->
    ok;
parse(Client = #client{level=admin}) ->
    ok.

或者我应该使用卫兵?

1 个答案:

答案 0 :(得分:1)

是的,你一定要使用警卫:

parse(Client = #client{level = Level}) when Level == manager; Level == admin ->
    ok;

模式匹配的表达性仅限于绑定和比较定义值的相等性。你不能像在type specification中那样写它:

-spec foo('admin' | 'manager') -> 'ok'.