Unetway

Erlang - Guards

Guards - это конструкции, которые мы можем использовать для увеличения мощности согласования шаблонов. Используя охранники, мы можем выполнять простые тесты и сравнения переменных в шаблоне.

Общий синтаксис инструкции охраны выглядит следующим образом:

function(parameter) when condition ->
  • function (parameter) - это объявление функции, которое используется в состоянии охраны.
  • parameter. Обычно условие защиты основано на параметре.
  • condition- Условие, которое должно быть оценено, чтобы проверить, должна ли выполняться функция или нет.
  • Оператор 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. Таким образом, вы можете определить одну и ту же функцию несколько раз, каждая с отдельным защитным условием.

Guards для заявлений «IF»

Гвардейцы также могут использоваться для операторов 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.

Guards для заявлений «case»

Гвардейцы также могут использоваться для операторов 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.

Несколько условий Guards

Для функции может быть задано несколько условий защиты. Общий синтаксис инструкции охраны с несколькими режимами защиты приведен ниже:

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("Less than 10"). 
   
start() -> 
   display(11).