erlang - 在 Erlang 中,有没有办法对一组枚举的原子进行模式匹配?

标签 erlang pattern-matching

我目前正在学习 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}.

我查看了有关模式匹配的文档,但找不到类似的内容。

最佳答案

目前没有直接的方法将原子列表指定为模式。

在你的情况下,你可以使用守卫,但它几乎不短

b_and(true, true) -> true;
b_and(A, B) when A =:= true or A =:= false,
                 B =:= true or B =:= false ->
    false.

顺便说一句,当用其他任何东西调用该函数都会出错时,人们通常会不使用错误子句。

您可以使用此解析转换 https://github.com/mad-cocktail/gin这会给你一个守卫的 in() 形式。问题是它是否值得,只是对于这样一个很少且不经常使用的功能,具有解析转换似乎有点重量级。

关于erlang - 在 Erlang 中,有没有办法对一组枚举的原子进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770852/

相关文章:

erlang - Cowboy HTTP POST 处理程序

erlang - 如何让 Rebar 在发布目录中运行 Common Test?

erlang - 为什么 Erlang 中 nil > 0 为真?

regex - 在正则表达式中,匹配字符串末尾或特定字符

string - 如何使用 Erlang 生成随机字母数字字符串?

erlang - 我的 gen_server 实现有什么问题?

python - URI 正则表达式模式匹配

enums - 如何在枚举中匹配 self ?

java - 正则表达式一次或多次JAVA

pattern-matching - 为什么 Agda 中的模式匹配有时是 "essential"?