当前位置: 首页 > 文档资料 > Erlang 中文教程 >

卫兵( Guards)

优质
小牛编辑
127浏览
2023-12-01

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

guard语句的一般语法如下 -

function(parameter) when condition ->

Where,

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

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

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

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

让我们看一下如何使用防护装置的快速示例 -

例子 (Example)

-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的保护。这样,您可以多次定义相同的功能,每个功能都有一个单独的保护条件。

上述计划的输出如下 -

输出 (Output)

greater than 10

保护条件也可用于if elsecase语句。 让我们看看我们如何对这些陈述进行守卫操作。

“if”声明的警卫

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

例子 (Example)

-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.

关于上面的例子需要注意以下事项 -

  • guard函数与if语句一起使用。 如果guard函数的计算结果为true,则显示语句“N大于10”。

  • 如果保护功能评估为假,则显示语句“N小于10”。

上述计划的输出如下 -

输出 (Output)

N is less than 10

“案件”陈述的警卫

防护也可用于案例陈述,以便执行的一系列陈述基于保护条件。 让我们看看我们如何实现这一目标。

例子 (Example)

-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.

关于上面的例子需要注意以下事项 -

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

  • 如果保护功能评估为其他任何内容,则显示“A的值小于10”的语句。

上述计划的输出如下 -

输出 (Output)

The value of A is less than 10

多重防护条件

还可以为功能指定多个保护条件。 具有多个保护条件的guard语句的一般语法如下 -

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

Where,

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

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

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

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

让我们看一下如何使用多个防护装置的快速示例 -

例子 (Example)

-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时,才会执行该函数。

上述计划的输出如下 -

输出 (Output)

Greater than 10