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 语句。让我们看看如何对这些语句执行保护操作。
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语句,以便执行的一系列语句基于保护条件。让我们看看如何实现这一目标。
-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
也可以为函数指定多个保护条件。具有多个保护条件的保护语句的一般语法如下-
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