2009-06-08 19 views
22

erlangでif-else式を実装するにはどうすればよいですか?if-elseの実装方法

if(a == b) { 
    expression1 
} else { 
    expression2 
} 
+0

また、[この質問](http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else)を参照してください。 – legoscia

答えて

31
if 
    a == b -> 
     expr1; 
    true -> 
     exprElse 
end 

本当の他には、あなただけの真のと一致、Erlangではありません。詳細はErlang documentationをご覧ください。

あなたは ';'に細心の注意を払わなければなりません。ターミネーター:

if 
    a == b -> 
     clauseN, 
     expr1; 
    cond2 -> 
     clause1, 
     clause2, 
     expr2; 
    cond3 -> 
     expr3; 
    true -> 
     exprElse 
end 

コピーペースト言語ではありません。

+0

Gud one thanxたくさん – Abhimanyu

+0

はErlang '=:='の等価演算子ではありませんか? – Tommy

+0

また、条件のいずれも一致しない場合はエラーであることに注意してください。したがって、真の句は、フォールスルーとして最後になります。 –

15
if 
    A =:= B -> 
     expr1; 
    true -> 
     expr2 
end 

または

case A =:= B of 
    true -> expr1; 
    false -> expr2 
end 

または

case A of 
    B -> expr1; 
    _ -> expr2 
end 

または

foo(A,B), ... 

... 
foo(X,X) -> expr1; 
foo(_,_) -> expr2. 
19

パターンマッチングはアーラン多くの強みの一つであり、if文では、多くの場合、代わりに使用することができます。関数の引数をパターンマッチングするか、(パターンマッチングでもある)case式を使用する方が読みやすくなります。

2つの引数をとる関数some_functionがあるとします。引数が等しい場合はexpression1を評価し、そうでない場合はexpression2を評価します。あなたが単純なパターンマッチングのこの種では達成することができますどのくらいの非常に素晴らしいです

some_function(A, A) -> expression1; 
some_function(A, B) -> expression2. 

:これは、Erlangで表現することができます。ガード句を使用すると、より複雑なパターンを表現することができ、例えば、

some_function(A, B) when A < B -> expression3. 

別の可能性はcase .. of表現を使用することです。あなたの特定の例は

case a == b of 
    true -> expression1; 
    false -> expression2 
end. 

に変換でしょう(abが等しく原子、決してあるので、この場合はexpression2は常に評価されます。Erlangでの変数は大文字です。)

あなたは読むことができますErlangの式hereの詳細。

+4

代わりに '=:= '=='の これは本当に良い答えです。新しいerlangプログラマーは 'if'ステートメントが' when'ステートメントであったはずの理由を理解するまで常に 'case'を使うべきです。 – archaelus

8

別のオプション:

case a of 
    b -> expr1; %% true 
    _ -> expr2 %% false 
end.