if-statement - 如何实现如果其他

  显示原文与译文双语对照的内容

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


 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 

它不是一个copy-paste友好的语言。

原作者:

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

假设你有一个带有两个参数的函数 some_function 。 如果参数相等,则计算 expression1,否则评估表达式。 这可以用erlang表示:


some_function(A, A) -> expression1;
some_function(A, B) -> expression2.

你可以用这种简单的模式匹配来达到惊人的效果。 使用保护子句可以表达更复杂的模式,e.g.


some_function(A, B) when A <B -> expression3.

另一种可能是使用 case.. of 表达式。 你的特定示例将转换为


case a == b of
 true -> expression1;
 false -> expression2
end.

( 在这种情况下,expression2 总是会被求值,因为 ab 是原子,并且永远不相等。 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.

原作者:
...