2012-07-08 18 views
8

私は、コードの種類一片ことがあります。Erlangのcase文に複数の一致がありますか?

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

は「DOA()」の部分を繰り返していない方法はありますか?簡単だと思ったけど、Googleで答えが見つからなかった。

答えて

13

@Bunnitが示唆するようにガードを使用する以外にも、節の本体の繰り返しを避ける方法はありません。 1つの句に代替パターンを持つ方法はありません。あなたのケースでは多くの繰り返しはありませんが、反復したボディがより複雑な場合、最良の方法は、それを別の関数に入れて呼び出すことです。

可能であれば、この機能を追加すると、変数の「面白い」処理が行われます。

19

などのcase文でガードするときは、使用することができます。また、あなたの式(sthが)ここでは、それらのいずれかの場合に一致することはできません意味原子

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

です。

+1

私の質問は少し一般的でした。 – zie1ony

+0

また、1と2が<3、はい、0、-1、-2、...のために危険です –

関連する問題