如何在erlang中实现这个if-else表达式?
if(a == b) {
expression1
} else {
expression2
}
答案 0 :(得分:32)
if
a == b ->
expr1;
true ->
exprElse
end
在Erlang中没有真正的其他东西,你只需要匹配true。有关更多信息,请访问Erlang documentation。
你必须密切关注';'终结者:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
这不是一种复制粘贴友好语言。
答案 1 :(得分:19)
模式匹配是Erlangs的众多优势之一,它通常可以用来代替if语句。对函数参数进行模式匹配或使用case表达式(也是模式匹配)通常更具可读性。
假设你有一个带有两个参数的函数some_function
。如果参数相等,则计算expression1,否则计算expression2。这可以用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表达式here的更多信息。
答案 2 :(得分: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.
答案 3 :(得分:8)
另一种选择:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.