Охоронці

Оновлено: 24.04.2023

guard ::=  "if" named_expression

guard (який є частиною case) має бути успішним для виконання коду всередині блоку case. Він приймає форму: if, після якого йде вираз.

Логічний послідовність блоку case з guard наступна:

Переконайтеся, що шаблон у блоці case виконано успішно. Якщо шаблон не вдається, guard не оцінюється, і перевіряється наступний case блок. Якщо шаблон вдався, оцініть guard. Якщо умова guard оцінюється як істинна, вибирається блок регістру. Якщо умова guard оцінюється як false, блок регістру не вибрано. Якщо охоронець викликає виняток під час оцінки, виняток з’являється.

Охоронцям дозволено мати побічні ефекти, оскільки вони є виразами. Оцінка Guard повинна проходити від першого до останнього блоку регістрів, по одному, пропускаючи блоки регістрів, шаблон(и) яких не всі є успішними. (Тобто оцінка охорони має відбуватися в порядку.) Оцінка охорони має припинитися, коли вибрано блок справи.