使用Erlang的情况,我遇到了一个问题。问题如下:
other languages:
switch(A)
{
case "A" : case "B" :
//do something
break;
}
那么,如何使用Erlang实现相同的功能呢?因为有时候设置这样的条件非常重要,以避免开销。
答案 0 :(得分:6)
答案 1 :(得分:6)
你可以在Erlang中使用 case 表达式。语法是:
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2;
...
end
引用Pragmatic Erlang:
案例评估如下。第一, 评估表达式;假设这个 评估为值。此后, Value 与 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中所有元素X的列表,其中P(X)为真。这可以使用模式匹配来编写,但 case 结构使代码更清晰。请注意,在模式匹配和案例表达之间进行选择是品味,风格和体验的问题。
答案 2 :(得分:3)
不是我最喜欢的风格,但你可以这样做:
case A of
_ when A == "A";
A == "B" -> do_ab();
_ when A == "C";
_ when A == "D" -> do_cd();
_ -> do_default()
end.