Erlang のケースを扱っていると、問題に直面しています。問題は次のとおりです。
other languages:
switch(A)
{
case "A" : case "B" :
//do something
break;
}
では、Erlang を使用して同じことを達成するにはどうすればよいでしょうか? オーバーヘッドを避けるために、このような条件を設定することが非常に重要な場合があるためです。
Erlangではcase式を使用できます。構文は次のとおりです。
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2;
...
end
Pragmatic Erlang を引用するには:
ケースは次のように評価されます。まず、 式が評価されます。これがValueに評価されると仮定します。その後、一致が見つかるまで、 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); P(X) が真である L のすべての要素 X のリストを返します。これはパターン マッチングを使用して記述できますが、case構造によりコードがより簡潔になります。パターン マッチングと case 式のどちらを選択するかは、好み、スタイル、および経験の問題であることに注意してください。
私の好きなスタイルではありませんが、次のようなことができます:
case A of
_ when A == "A";
A == "B" -> do_ab();
_ when A == "C";
_ when A == "D" -> do_cd();
_ -> do_default()
end.