我目前正在接受Erlang,它的模式匹配是我在一段时间内看到的最酷的事情之一。一个小玩具功能,我在我的练习拿出如下:在Erlang中,有没有一种模式匹配枚举的原子集?
b_and(true, true) ->
true;
b_and(true, false) ->
false;
b_and(false, true) ->
false;
b_and(false, false) ->
false;
b_and(_, _) ->
{error, invalid_object}.
我不知道,不过,是否有语法的图案讲述一个变量只能从一组枚举原子接受?这样的话,我可以把它缩短到这样的事情:
b_and(true, true) ->
true;
% We've already satisfied the only true case
b_and(ENUM(true, false), ENUM(true, false)) ->
false;
b_and(_, _) ->
{error, invalid_object}.
我已经通过模式匹配的文档看,但我找不到这样的事。
非常感谢。这是你所指的分析转换吗? https://github.com/mad-cocktail/gin –
是的,更新我的回答 –
根据@Kaos的建议:你绝对不应该在b_and/2中有一个错误子句!如果使用非布尔参数调用它,它应该会产生一个错误。通常,类型错误会/会产生异常,大多数类库遵循此规则。 – rvirding