使用Erlang的情况,我遇到了一个问题.问题如下:
other languages:
switch(A)
{
case "A" : case "B" :
//do something
break;
}
Run Code Online (Sandbox Code Playgroud)
那么,如何使用Erlang实现相同的功能呢?因为有时候放置这样的条件非常重要,以避免开销.
可能是守卫是你想要的.
the_answer_is(N) when A == "A"; A == "B";
Run Code Online (Sandbox Code Playgroud)
; - 是OR, - 是AND
您可以在Erlang中使用案例表达式.语法是:
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2;
...
end
Run Code Online (Sandbox Code Playgroud)
引用Pragmatic Erlang:
案例评估如下.首先, 评估表达 ; 假设这个评估为Value.此后,Value 依次与Pattern1 (使用可选的Guard Guard1), Pattern2等匹配,直到找到匹配为止.一旦找到匹配,则评估相应的表达序列 - 评估表达序列的结果是案例表达式的值.如果没有任何模式匹配,则会引发异常.
一个例子:
filter(P, [H|T]) ->
case P(H) of
true -> [H|filter(P, T)];
false -> filter(P, T)
end;
filter(P, []) ->
[].
Run Code Online (Sandbox Code Playgroud)
过滤器(P,L); 返回L中所有元素X的列表,其中P(X)为真.这可以使用模式匹配来编写,但case结构使代码更清晰.请注意,在模式匹配和案例表达之间进行选择是品味,风格和体验的问题.
| 归档时间: |
|
| 查看次数: |
3095 次 |
| 最近记录: |