Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Объекты исключений / Exercises / Сопоставьте тип
Решение: Сопоставьте тип
Вот один из возможных вариантов решения задачи.
Код
{
my $x = 1 / 0;
say $x;
CATCH {
when X::Numeric::DivideByZero {
say 'cannot divide by zero';
}
}
}🦋 Исходный код можно найти в файле match-the-type.raku.
Вывод
cannot divide by zeroКомментарии
В Raku
1 / 0не взрывается сразу; получается ленивыйFailure. Исключение бросается лишь тогда, когда мы пользуемся значением — здесь при попытке напечатать его черезsay.Брошенное исключение имеет встроенный тип
X::Numeric::DivideByZero, иwhen X::Numeric::DivideByZeroсопоставляет его в точности. Сопоставление конкретного типа — вместо того чтобы ловить всё подряд черезdefault— позволяет обрабатывать разные ошибки по-разному.