当前位置:  开发笔记 > 编程语言 > 正文

如何实现if-else

如何解决《如何实现if-else》经验,为你挑选了4个好方法。

如何在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 

它不是一种复制粘贴友好语言.



1> Raoul Superc..:
if
    a == b ->
        expr1;
    true ->
        exprElse
end

在Erlang中没有真正的其他东西,你只需要匹配true.有关Erlang文档的更多信息.

你必须密切关注';' 终结者:

if
    a == b ->
        clauseN,
        expr1;
    cond2 ->
        clause1,
        clause2,
        expr2;
    cond3 ->
        expr3;
    true ->
        exprElse
end 

它不是一种复制粘贴友好语言.



2> Jonas..:

模式匹配是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程序员应该总是使用`case`,直到他们弄清楚为什么`if`语句应该是`when`语句.

3> Hynek -Pichi..:
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.



4> marcc..:

另外一个选项:

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

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有