如何在erlang中实现这个if-else表达式?
if(a == b) { expression1 } else { expression2 }
Raoul Superc.. 32
if a == b -> expr1; true -> exprElse end
在Erlang中没有真正的其他东西,你只需要匹配true.有关Erlang文档的更多信息.
你必须密切关注';' 终结者:
if a == b -> clauseN, expr1; cond2 -> clause1, clause2, expr2; cond3 -> expr3; true -> exprElse end
它不是一种复制粘贴友好语言.
if a == b -> expr1; true -> exprElse end
在Erlang中没有真正的其他东西,你只需要匹配true.有关Erlang文档的更多信息.
你必须密切关注';' 终结者:
if a == b -> clauseN, expr1; cond2 -> clause1, clause2, expr2; cond3 -> expr3; true -> exprElse end
它不是一种复制粘贴友好语言.
模式匹配是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的表达在这里.
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.