13

私はそのようなコードを持っています:

case sth of
    {a, 1} -> doA();
    {a, 2} -> doA();
    {a, 3} -> doB()
end.

「doA()」部分を繰り返さない方法はありますか? 簡単だと思ったのですが、グーグルで答えが見つかりませんでした。

4

2 に答える 2

24

次のような case ステートメントで when ガードを使用できます。

case sth of
    {a, Var} when Var < 3-> doA();
    {a, 3} -> doB()
end.

また、あなたの式(sth)はここではアトムであり、これらのケースのいずれにも一致しないことを意味します。

于 2012-07-08T07:19:24.990 に答える
15

@Bunnit によって提案された方法でガードを使用する以外に、句本体の繰り返しを回避する方法はありません。1 つの句に別のパターンを含める方法はありません。あなたの場合、繰り返しはあまりありませんが、繰り返される本体がより複雑な場合は、それを別の関数に入れて呼び出すのが最善の方法です。

この機能を追加することは可能ですが、変数の「興味深い」処理につながります。

于 2012-07-08T10:53:21.523 に答える