If statement 如何在Erlang中等效于C风格的if-else语句?
如何在Erlang中生成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
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.