Guard是可以用來增加模式匹配功能的結構。使用Guard,我們可以對模式中的變量執(zhí)行簡單的測試和比較。
Guard語句的一般語法如下-
function(parameter) when condition ->
在哪里,
Function(parameter) ?這是在保護條件下使用的函數(shù)聲明。
Parameter ?通常,保護條件基于參數(shù)。
Condition ?評估條件,以確定是否應執(zhí)行函數(shù)。
當指定了Guard條件時,必須使用when語句。
讓我們看一下如何使用守衛(wèi)的簡單示例-
-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 函數(shù)與一個Guard一起定義。當參數(shù) n 大于10時,第一個顯示聲明有一個保護。因此,如果參數(shù)大于10,就會調用該函數(shù)。
再次定義了 display 函數(shù),但這次的保護小于10。通過這種方式,您可以多次定義同一個函數(shù),每個函數(shù)都有一個單獨的Guard條件。
上述程序的輸出如下:
greater than 10
保護條件也可用于 if else 和 case 語句。讓我們看看如何對這些語句執(zhí)行保護操作。
Guard也可用于if語句,以便執(zhí)行的一系列語句基于保護條件。讓我們看看如何才能做到這一點。
-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函數(shù)與if語句一起使用。如果guard函數(shù)的計算結果為true,則顯示語句“N大于10”。
如果guard函數(shù)的計算結果為false,則顯示語句“N小于10”。
上面程序的輸出如下:
N is less than 10
保護還可以用于case語句,以便執(zhí)行的一系列語句基于保護條件。讓我們看看如何實現(xiàn)這一目標。
-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函數(shù)與case語句一起使用。如果guard函數(shù)的計算結果為true,則顯示語句“A的值大于10”。
如果guard函數(shù)的計算結果為其他值,則會顯示語句“A的值小于10”。
上面程序的輸出如下:
A的值小于10
也可以為函數(shù)指定多個保護條件。具有多個保護條件的保護語句的一般語法如下-
function(parameter) when condition1 , condition1 , .. conditionN ->
在哪里,
Function(parameter) ?這是使用保護條件的函數(shù)聲明。
Parameter ?通常,保護條件基于參數(shù)。
condition1, condition1, .. conditionN ?這些是應用于函數(shù)的多重保護條件。
當指定了保護條件時,必須使用when語句。
讓我們看一下如何使用多個守衛(wèi)的簡單示例-
-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函數(shù)聲明,除了N>10的條件外,還指定了is\u integer的條件。因此,只有當N的值是整數(shù)且大于10時,才會執(zhí)行此函數(shù)。
上面程序的輸出如下:
小于 10