如何实现if-else

时间:2009-06-08 08:40:18

标签: if-statement erlang

如何在erlang中实现这个if-else表达式?

 if(a == b) {
   expression1
 } else {
   expression2 
 }

4 个答案:

答案 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始终会被评估,因为ab是原子并且永远不会彼此相等.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.