gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:41:54 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com