Guard是可以用來(lái)增加模式匹配功能的結(jié)構(gòu)。使用Guard,我們可以對(duì)模式中的變量執(zhí)行簡(jiǎn)單的測(cè)試和比較。
Guard語(yǔ)句的一般語(yǔ)法如下-
function(parameter) when condition ->
在哪里,
Function(parameter) ?這是在保護(hù)條件下使用的函數(shù)聲明。
Parameter ?通常,保護(hù)條件基于參數(shù)。
Condition ?評(píng)估條件,以確定是否應(yīng)執(zhí)行函數(shù)。
當(dāng)指定了Guard條件時(shí),必須使用when語(yǔ)句。
讓我們看一下如何使用守衛(wèi)的簡(jiǎn)單示例-
-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).
關(guān)于上述示例,需要注意以下幾點(diǎn):
display 函數(shù)與一個(gè)Guard一起定義。當(dāng)參數(shù) n 大于10時(shí),第一個(gè)顯示聲明有一個(gè)保護(hù)。因此,如果參數(shù)大于10,就會(huì)調(diào)用該函數(shù)。
再次定義了 display 函數(shù),但這次的保護(hù)小于10。通過(guò)這種方式,您可以多次定義同一個(gè)函數(shù),每個(gè)函數(shù)都有一個(gè)單獨(dú)的Guard條件。
上述程序的輸出如下:
greater than 10
保護(hù)條件也可用于 if else 和 case 語(yǔ)句。讓我們看看如何對(duì)這些語(yǔ)句執(zhí)行保護(hù)操作。
Guard也可用于if語(yǔ)句,以便執(zhí)行的一系列語(yǔ)句基于保護(hù)條件。讓我們看看如何才能做到這一點(diǎn)。
-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.
關(guān)于上述示例,需要注意以下幾點(diǎn):
guard函數(shù)與if語(yǔ)句一起使用。如果guard函數(shù)的計(jì)算結(jié)果為true,則顯示語(yǔ)句“N大于10”。
如果guard函數(shù)的計(jì)算結(jié)果為false,則顯示語(yǔ)句“N小于10”。
上面程序的輸出如下:
N is less than 10
保護(hù)還可以用于case語(yǔ)句,以便執(zhí)行的一系列語(yǔ)句基于保護(hù)條件。讓我們看看如何實(shí)現(xiàn)這一目標(biāo)。
-module(helloworld). -export([start/0]). start() -> A = 9, case A of {A} when A>10 -> io:fwrite("A的值大于10"); _ -> io:fwrite("A的值小于10") end.
關(guān)于上述示例,需要注意以下幾點(diǎn):
guard函數(shù)與case語(yǔ)句一起使用。如果guard函數(shù)的計(jì)算結(jié)果為true,則顯示語(yǔ)句“A的值大于10”。
如果guard函數(shù)的計(jì)算結(jié)果為其他值,則會(huì)顯示語(yǔ)句“A的值小于10”。
上面程序的輸出如下:
A的值小于10
也可以為函數(shù)指定多個(gè)保護(hù)條件。具有多個(gè)保護(hù)條件的保護(hù)語(yǔ)句的一般語(yǔ)法如下-
function(parameter) when condition1 , condition1 , .. conditionN ->
在哪里,
Function(parameter) ?這是使用保護(hù)條件的函數(shù)聲明。
Parameter ?通常,保護(hù)條件基于參數(shù)。
condition1, condition1, .. conditionN ?這些是應(yīng)用于函數(shù)的多重保護(hù)條件。
當(dāng)指定了保護(hù)條件時(shí),必須使用when語(yǔ)句。
讓我們看一下如何使用多個(gè)守衛(wèi)的簡(jiǎn)單示例-
-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).
關(guān)于以上示例,需要注意以下幾點(diǎn):
您將注意到,對(duì)于第一個(gè)display函數(shù)聲明,除了N>10的條件外,還指定了is\u integer的條件。因此,只有當(dāng)N的值是整數(shù)且大于10時(shí),才會(huì)執(zhí)行此函數(shù)。
上面程序的輸出如下:
小于 10