If statement 如何在Erlang中等效于C风格的if-else语句?

If statement 如何在Erlang中等效于C风格的if-else语句?,if-statement,erlang,If Statement,Erlang,如何在Erlang中生成if-else的等价物 if(a == b) { expression1 } else { expression2 } 在Erlang中没有真实的其他对象,您只需与真实匹配即可。更多信息请访问 你必须密切注意“;”终止符: if a == b -> clauseN, expr1; cond2 -> clause1, clause2, expr2

如何在Erlang中生成if-else的等价物

 if(a == b) {
   expression1
 } else {
   expression2 
 }
在Erlang中没有真实的其他对象,您只需与真实匹配即可。更多信息请访问

你必须密切注意“;”终止符:

if
    a == b ->
        clauseN,
        expr1;
    cond2 ->
        clause1,
        clause2,
        expr2;
    cond3 ->
        expr3;
    true ->
        exprElse
end 
这不是一种复制粘贴友好的语言

if
    A =:= B ->
        expr1;
    true ->
        expr2
end 


模式匹配是Erlangs的许多优点之一,它通常可以用来代替if语句。在函数参数上进行模式匹配或使用case表达式(也就是模式匹配)通常更具可读性

假设您有一个函数
某个函数
,它接受两个参数。如果参数相等,则计算表达式1,否则计算表达式2。这可以用erlang表示为:

some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
通过这种简单的模式匹配,您可以实现的效果非常惊人。使用guard子句可以表示更复杂的模式,例如

some_function(A, B) when A < B -> expression3. 
(在这种情况下,
expression2
将始终进行求值,因为
a
b
是原子,它们永远不相等。Erlang中的变量是大写。)

您可以阅读有关Erlang表达式的更多信息。

另一个选项:

case a of
    b -> expr1;  %% true
    _ -> expr2   %% false
end.

我还建议使用
=:=
而不是
=
。这是一个非常好的答案-新的erlang程序员应该始终使用
case
,直到他们弄清楚为什么
if
语句应该是
when
语句。另请参见。erlang
=:=
中的相等运算符不是吗?还要注意,如果没有任何条件匹配,这是一个错误,因此,true子句作为一个失败的结尾。@Tommy Erlang还有
==
=
表示等于,
=:=
表示完全等于,有点像JavaScript的
==
  foo(A,B), ...

...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
some_function(A, B) when A < B -> expression3. 
case a == b of
    true -> expression1;
    false -> expression2
end.
case a of
    b -> expr1;  %% true
    _ -> expr2   %% false
end.