Как реализовать это выражение if-else в erlang?
if(a == b) {
expression1
} else {
expression2
}
Как реализовать это выражение if-else в erlang?
if(a == b) {
expression1
} else {
expression2
}
if
a == b ->
expr1;
true ->
exprElse
end
В Erlang нет ничего другого, вы просто согласитесь с истиной. Дополнительная информация в Документация Erlang.
Вы должны обратить пристальное внимание на ';' терминатор:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
Это не дружественный язык для копирования-вставки.
Совпадение шаблонов является одним из многих преимуществ Erlangs, и его часто можно использовать вместо операторов if. Это часто более читаемо для сопоставления шаблонов по аргументам функции или использования выражения case (которое также является сопоставлением шаблонов).
Предположим, что у вас есть функция some_function
, которая принимает два аргумента. Если аргументы равны, вы вычисляете выражение1, иначе вы оцениваете выражение2. Это можно выразить в erlang как:
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
Удивительно, насколько вы можете достичь такого простого сопоставления шаблонов. С предложениями охраны вы можете выразить более сложные шаблоны, например,
some_function(A, B) when A < B -> expression3.
Другая возможность - использовать выражение case .. of
. Ваш конкретный пример будет переведен на
case a == b of
true -> expression1;
false -> expression2
end.
(В этом случае expression2
всегда будет оцениваться, так как a
и b
являются атомами и никогда не равны друг другу. Переменные в Erlang являются верхним регистром.)
Вы можете узнать больше об выражениях Erlang здесь.
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.
Другая опция:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.