2014-01-14 2 views
1

erlang의 if 문 및 반환 값 (이 경우 true-> true)의 배경이 궁금합니다. 이건 내 코드예요.if 문을 Erlang하고 true를 반환합니다.

if 
(Velocity > 40) -> io:format(" processing fast !~n") ; 
true -> true 
end, 

Erlang은 진실한 진술 옵션이없는 경우 if를 사용할 수 없다는 것을 알고 있습니다. 하지만 심지어는 true -> false를 사용할 수 있지만 최종 출력에는 문제가되지 않습니다.

사실 if 절과 반환 값의 배경은 무엇입니까?

+2

사실, 당신의 조건에 "참"을 갖는 것은 오히려 낙심입니다. 왜냐하면 이것은 당신이 조건을 검사 할 때 모든 가능성을 다루지 못함을 보여주기 때문입니다. 가능한 모든 조건을 확인하면 진실한 진술은 반드시 필요하거나 의무 사항은 아닙니다. – 3yakuya

+0

감사합니다 Byakuya. –

답변

6

Erlang의 if는 부울 식의 간단한 패턴 일치이며 결과를 반환합니다.

정말 뭔가가 일치하는지, 당신은 "사실 -> 사실"필요가 없습니다 필요

모든

예를 들어

의 경우 : - 경우

if 
(Velocity > 40) -> io:format(" processing fast !~n") ; 
(Velocity < 40) -> io:format(" processing slow !~n") ; 
(Velocity == 40) -> io:format(" processing eh !~n") 
end, 

더 "> 사실"없습니다를 그러나 패턴 중 하나와 일치하지 않을 가능성도 없습니다.

그 이유는 "경우는" 그래서, 당신은 같은 것을 할 수있는 (얼랑의 모든 같은) 표현도 있다는 것입니다 :의 값이 무엇

X = if 
    (Vel > 40) -> 10; 
    (Vel < 40) -> 5 
    end, 

하면 VEL의 == (40) 엑스? 그것은 정의되지 않았으므로 erlang은 항상 일치하는 것을 요구합니다.

당신이 완전한 일치를 지정하지 않는 일반적인 일이 같은 사실 사용하는 것입니다 : 마지막 경우

X = if 
    (Vel > 40) -> 10; 
    (Vel < 40) -> 5; 
    true -> 0 
    end, 

, X는 항상 값이 (10, 5 또는 0)

의미가 있습니까?

0

얼랭에서는 모든 것이 값을 반환하는 표현식입니다. true -> true 문은 필요하지 않지만 포함하지 않고 일치하는 항목이 없으면 인터프리터가 식의 반환 값을 결정할 수 없기 때문에 오류가 발생합니다.

이것은 언어의 기능입니다.

관련 문제