编辑这个页面须要登录或更高权限!

Erlang Guard

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

Guard语句的一般语法如下-

function(parameter) when condition ->

在哪里,

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

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

  • Condition −评估条件,以确定是否应执行函数。

  • 当指定了Guard条件时,必须使用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).

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

  • display 函数与一个Guard一起定义。当参数 n 大于10时,第一个显示声明有一个保护。因此,如果参数大于10,就会调用该函数。

  • 再次定义了 display 函数,但这次的保护小于10。通过这种方式,您可以多次定义同一个函数,每个函数都有一个单独的Guard条件。

上述程序的输出如下:

greater than 10

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

if语句的Guard

Guard也可用于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.

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

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

  • 如果guard函数的计算结果为false,则显示语句“N小于10”。

上面程序的输出如下:

输出

N is less than 10

“case”语句的Guard

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

实例

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

start() -> 
   A = 9, 
   case A of {A} when A>10 -> 
      io:fwrite("A的值大于10"); _ -> 
      io:fwrite("A的值小于10") 
   end.

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

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

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

上面程序的输出如下:

输出

A的值小于10

多重Guard条件

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

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

在哪里,

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

  • 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("小于 10"). 
   
start() -> 
   display(11).

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

  • 您将注意到,对于第一个display函数声明,除了N>10的条件外,还指定了is\u integer的条件。因此,只有当N的值是整数且大于10时,才会执行此函数。

上面程序的输出如下:

输出

小于 10