Jak zaimplementować to wyrażenie if-else w erlangu?Jak zaimplementować if-else
if(a == b) {
expression1
} else {
expression2
}
Jak zaimplementować to wyrażenie if-else w erlangu?Jak zaimplementować if-else
if(a == b) {
expression1
} else {
expression2
}
if
a == b ->
expr1;
true ->
exprElse
end
Nie ma prawdziwego indziej w Erlang, po prostu pasuje z prawdą. Więcej informacji pod numerem Erlang documentation.
Należy zwrócić szczególną uwagę na ";" terminator:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
Nie jest to język przyjazny dla kopiowania i wklejania.
if
A =:= B ->
expr1;
true ->
expr2
end
lub
case A =:= B of
true -> expr1;
false -> expr2
end
lub
case A of
B -> expr1;
_ -> expr2
end
lub
foo(A,B), ...
...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
dopasowanie Wzór jest jednym z Erlangs wiele zalet i może być często używana zamiast if. Często jest bardziej czytelne dopasowanie do wzorca argumentów funkcji lub użycie wyrażenia case (które również jest dopasowaniem do wzorca).
Załóżmy, że masz funkcję some_function
, która pobiera dwa argumenty. Jeśli argumenty są równe, oceniasz wyrażenie1, w przeciwnym razie ocenisz wyrażenie expression2. Można to wyrazić w języku erlang:
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
To niesamowite, ile można osiągnąć dzięki temu prostemu dopasowywaniu wzorców. Z klauzul ochronnych można wyrazić bardziej skomplikowane wzory, np
some_function(A, B) when A < B -> expression3.
Inną możliwością jest użycie wyrażenia case .. of
. Twój szczególności Przykładem może przełożyć się
case a == b of
true -> expression1;
false -> expression2
end.
(w tym przypadku expression2
zawsze będzie oceniana od a
i b
atomy i nigdy nie równa się nawzajem. Zmienne w Erlang są wielkie litery).
Możesz przeczytać więcej o wyrażeniach Erlang here.
Proponuję również użycie '=: =' zamiast z '=='. To jest naprawdę dobra odpowiedź - nowi programiści erlang powinni zawsze używać "case", dopóki nie zrozumieją, dlaczego instrukcja "if" powinna być instrukcją 'when'. – archaelus
Inną opcją:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.
Patrz także [to pytanie] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia