zoukankan      html  css  js  c++  java
  • erlang判断语法结构:if/case/guard

    erlang 有好几种常用的判断结构语句,如 if、case、guard 等。文章将分别对 if / case /guard 的特点做介绍,以及用例说明

    1、if 结构

    [plain] view plaincopy
     
    1. if   
    2.     Condition 1 ->   
    3.         Action 1;   
    4.     Condition 2 ->   
    5.         Action 2;   
    6.     Condition 3 ->   
    7.         Action 3;   
    8.     Condition 4 ->   
    9.         Action 4   
    10. end  

    Erlang是这样工作的:先对Condition 1求值,如值为true,那么将执行Action 1,并跳出该结构。若Condition 1不成功,那么就继续对Condition 2求职,以此类推,直到有条件成功。在if结构中,知道要有一个结果为true,否则Erlang就会抛出一个异常。通常if语句的最后一个条件会是原子true,表示如果没有匹配的条件的话,应该做什么动作。

    2、 case 结构

    [plain] view plaincopy
     
    1. case Condition of   
    2.      Result 1 ->  
    3.            Action 1;        
    4.      Result 2 ->  
    5.            Action 2;  
    6.      Result 3 ->  
    7.            Action 3  
    8. end  

    Erlang是这样工作的:首先,对Condition进行求值,然后将结果依次对Result 1、Result 2等进行匹配,直到找到可以匹配的分支。我们可以把变量_放到最下面的条件层,用来处理没有匹配条件要执行的动作。

    3、guard 结构

    [plain] view plaincopy
     
    1. max(X, Y) when X > Y -> X;  
    2. max(X, Y) -> Y.  

    守卫(guard)是一种用于强化模式匹配功能的结构。如果点第一个子句不匹配,那么erlang会尝试匹配第二个子句。通常把没有任何限定条件的函数放最下面,用来处理没有匹配条件要执行的动作。

    下面简单写了一个例子来说明:

    [plain] view plaincopy
     
      1. -module(compare).  
      2.   
      3. -export([compare/2, compare2/2, compare3/2]).  
      4.   
      5. %% if 语句  
      6. compare(A, B) ->  
      7.     if A > B ->  
      8.             io:format("~p > ~p~n", [A, B]);  
      9.        A < B ->  
      10.             io:format("~p < ~p~n", [A, B]);  
      11.        true ->  
      12.             io:format("~p = ~p~n", [A, B])  
      13.     end.  
      14.   
      15. %% guard 语句  
      16. compare2(A, B) when A > B ->  
      17.     io:format("~p > ~p~n", [A, B]);  
      18. compare2(A, B) when A < B ->  
      19.     io:format("~p < ~p~n", [A, B]);  
      20. compare2(A, B) ->  
      21.     io:format("~p = ~p~n", [A, B]).  
      22.   
      23. %% case 语句  
      24. compare3(A, B) ->  
      25.     case A > B of  
      26.         true ->  
      27.             io:format("~p > ~p~n", [A, B]);  
      28.         _ ->  
      29.             case A < B of  
      30.                 true ->  
      31.                     io:format("~p < ~p~n", [A, B]);  
      32.                 _ ->  
      33.                     io:format("~p = ~p~n", [A, B])  
      34.             end  
      35.     end.  
  • 相关阅读:
    js 绑定事件没有触发的离奇事件
    TweenMax 中 tweenTo
    TweenMax 中 to,staggerTo 的第 4 、5 个参数
    Mongodb 数据库操作
    cocos2dx骨骼动画Armature源码分析(一)
    TexturePacker大图还原成小图工具带源码
    通过JavaScript原型链理解基于原型的编程
    webpack 之(25) output配置详解
    webpack 之(24) entry配置详解
    webpack 之(23) 优化配置 总结
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4601869.html
Copyright © 2011-2022 走看看