Курс Raku / Об’єкти, введення-виведення та винятки / Винятки / Об’єкти винятків / Вправи / Зіставте тип
Розв’язання: Зіставте тип
Ось один із можливих варіантів розв’язання задачі.
Код
{
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, дозволяє обробляти різні помилки по-різному.