📅  最后修改于: 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 else和case语句。让我们看看如何对这些语句执行保护操作。
保护也可以用于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