📜  Erlang-守卫

📅  最后修改于: 2020-11-04 05:56:49             🧑  作者: Mango


防护是可以用来增加模式匹配功能的结构。使用警卫,我们可以对模式中的变量执行简单的测试和比较。

Guard语句的一般语法如下-

function(parameter) when condition ->

哪里,

  • Function(parameter) -这是在保护条件下使用的函数声明。

  • 参数-通常,保护条件基于该参数。

  • 条件-应该评估条件以查看是否应该执行函数。

  • 当指定了保护条件时,必须使用when语句。

让我们看一下如何使用守卫的简单示例-

-module(helloworld). 
-export([display/1,start/0]). 

display(N) when N > 10 ->   
   io:fwrite("greater then 10"); 
display(N) when N < 10 -> io:fwrite("Less 
   than 10"). 

start() -> 
   display(11).

关于上述示例,需要注意以下几点:

  • 显示函数与防护装置一起定义。第一个显示声明保护参数N何时大于10。因此,如果参数大于10,则将调用该函数。

  • 再次定义了显示函数,但这次的保护范围小于10。这样,您可以多次定义相同的函数,每次都具有单独的保护条件。

上面程序的输出如下:

输出

greater than 10

保护条件也可以用于if elsecase语句。让我们看看如何对这些语句执行保护操作。

警惕“如果”的陈述

保护也可以用于if语句,以便所执行的一系列语句基于保护条件。让我们看看如何实现这一目标。

-module(helloworld). 
-export([start/0]). 

start() -> 
   N = 9, 
   if 
      N > 10 -> 
         io:fwrite("N is greater than 10"); 
      true -> 
         io:fwrite("N is less than 10") 
   end.

关于上述示例,需要注意以下几点:

  • 保护函数与if语句一起使用。如果保护函数评估为true,则显示语句“ N大于10”。

  • 如果保护函数的值为假,则显示语句“ N小于10”。

上面程序的输出如下:

输出

N is less than 10

警惕“案件”陈述

保护还可以用于case语句,以便执行的一系列语句基于保护条件。让我们看看如何实现这一目标。

-module(helloworld). 
-export([start/0]). 

start() -> 
   A = 9, 
   case A of {A} when A>10 -> 
      io:fwrite("The value of A is greater than 10"); _ -> 
      io:fwrite("The value of A is less than 10") 
   end.

关于上述示例,需要注意以下几点:

  • 保护函数与case语句一起使用。如果保护函数的计算结果为true,则显示语句“ A的值大于10”。

  • 如果保护函数的计算结果为其他值,则显示语句“ A的值小于10”。

上面程序的输出如下:

输出

The value of A is less than 10

多重警卫条件

也可以为一个函数指定多个保护条件。下面给出了具有多个保护条件的保护语句的一般语法-

function(parameter) when condition1 , condition1 , .. conditionN ->

哪里,

  • Function(parameter) -这是使用保护条件的函数声明。

  • 参数-通常,保护条件基于该参数。

  • condition1,condition1,.. conditionN-这些是应用于功能的多重保护条件。

  • 当指定了保护条件时,必须使用when语句。

让我们看一下如何使用多个守卫的简单示例-

-module(helloworld). 
-export([display/1,start/0]). 

display(N) when N > 10 , is_integer(N) -> 
   io:fwrite("greater then 10"); 
display(N) when N < 10 -> 
   io:fwrite("Less than 10"). 
   
start() -> 
   display(11).

关于以上示例,需要注意以下几点:

  • 您会注意到,对于第一个显示函数声明,除了N> 10的条件外,还指定了is_integer的条件。因此,仅当N的值是整数且大于10时,此函数才会执行。

上面程序的输出如下:

输出

Greater than 10