erlang中的大小写问题

发布于 2024-08-13 03:05:31 字数 201 浏览 4 评论 0原文

在处理 Erlang 的案例时,我遇到了一个问题。问题如下:

other languages:
switch(A) 
{
  case "A" : case "B" :
   //do something
  break;
}

那么,如何使用 Erlang 实现同样的事情呢?因为有时设置这样的条件非常重要,以避免开销。

Working with Erlang's case, I'm facing a problem. The problem is the following:

other languages:
switch(A) 
{
  case "A" : case "B" :
   //do something
  break;
}

So, how to achieve the same thing using Erlang? Because sometimes it is very important to put conditions like these, to avoid overhead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

德意的啸 2024-08-20 03:05:31

可能守卫就是你想要的。

the_answer_is(N) when A == "A"; A == "B";

; - 是或
, - 是 AND

May be guards are what you want.

the_answer_is(N) when A == "A"; A == "B";

; - is OR
, - is AND

无人接听 2024-08-20 03:05:31

可以在Erlang中使用case表达式。语法是:

case Expression of
    Pattern1 [when Guard1] -> Expr_seq1;
    Pattern2 [when Guard2] -> Expr_seq2;
    ...
end

引用 Pragmatic Erlang 的话:

案例评估如下。第一的,
表达式被评估;假设这个
计算结果为。此后,
依次与Pattern1匹配
(使用可选的守卫 Guard1),
Pattern2,依此类推,直到匹配
成立。一旦找到匹配项,
那么对应的表达式
序列被评估——结果
评估表达式序列是
case 表达式的值。如果
没有一个模式匹配,然后
引发异常。

一个例子:

filter(P, [H|T]) ->
    case P(H) of
        true -> [H|filter(P, T)];
        false -> filter(P, T)
    end;
filter(P, []) ->
    [].

过滤器(P,L);返回 L 中 P(X) 为 true 的所有元素 X 的列表。这可以使用模式匹配来编写,但是 case 构造使代码更清晰。请注意,在模式匹配和案例表达之间进行选择取决于品味、风格和经验。

You can use case expressions in Erlang. The syntax is:

case Expression of
    Pattern1 [when Guard1] -> Expr_seq1;
    Pattern2 [when Guard2] -> Expr_seq2;
    ...
end

To quote Pragmatic Erlang:

case is evaluated as follows. First,
Expression is evaluated; assume this
evaluates to Value. Thereafter, Value
is matched in turn against Pattern1
(with the optional guard Guard1),
Pattern2, and so on, until a match is
found. As soon as a match is found,
then the corresponding expression
sequence is evaluated—the result of
evaluating the expression sequence is
the value of the case expression. If
none of the patterns match, then an
exception is raised.

An example:

filter(P, [H|T]) ->
    case P(H) of
        true -> [H|filter(P, T)];
        false -> filter(P, T)
    end;
filter(P, []) ->
    [].

filter(P , L); returns a list of all those elements X in L for which P(X) is true. This can be written using pattern matching, but the case construct makes the code cleaner. Note that choosing between pattern matching and case expressions is a matter of taste, style and experience.

小苏打饼 2024-08-20 03:05:31

不是我最喜欢的风格,但你可以这样做:

case A of
  _ when A == "A";
         A == "B" -> do_ab();
  _ when A == "C";
  _ when A == "D" -> do_cd();
  _               -> do_default()
end.

Not my favorite style, but you can do something like:

case A of
  _ when A == "A";
         A == "B" -> do_ab();
  _ when A == "C";
  _ when A == "D" -> do_cd();
  _               -> do_default()
end.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文