2009-06-08 2 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 documentation.

';'에주의를 기울여야합니다. 터미네이터 :

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

복사하여 붙여 넣을 수있는 언어는 아닙니다.

+0

Gud가 고맙습니다. – Abhimanyu

+0

은 Erlang'= : ='의 항등 연산자가 아닙니까? – Tommy

+0

조건이 일치하지 않으면 오류이므로 오류 절이 true로 끝나는 것으로 간주됩니다. –

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

패턴 매칭은 Erlangs 많은 장점 중 하나이며, 그것은 종종 대신 if 문 사용할 수 있습니다. 함수 인수에서 패턴 매치를하거나 패턴 표현을 사용하는 사례 표현을 사용하는 것이 더 읽기 쉽습니다.

두 개의 인수를 취하는 some_function 함수가 있다고 가정 해보십시오. 인수가 같으면 expression1을 평가하고, 그렇지 않으면 expression2를 평가합니다. 이 같은 얼랑으로 표현 될 수있다 :

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

그것은 당신이 단순한 패턴 매칭의 종류 달성 할 수있는 얼마나 많은 매우 놀랍습니다. 가드 조항하면

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

또 다른 가능성은 case .. of 표현을 사용하는 것, 예를 들어, 더 복잡한 패턴을 표현할 수 있습니다. 특정 예 (expression2 항상 ab 원자 때문에 평가와 얼랑의 변수는 대문자입니다. 서로 결코 동일한 것이이 경우.)

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

로 변환 할

당신은 읽을 수 있습니다 얼랑 표현에 대한 자세한 내용 here.

+4

대신'= : = ' '=='. 이것은 정말 좋은 답변입니다. 새로운 erlang 프로그래머는'if' 문이'when' 문이어야하는 이유를 알아낼 때까지 항상'case'를 사용해야합니다. – archaelus

8

또 다른 옵션 :

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