Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Собственные исключения / Exercises / Два типа исключений
Решение: Два типа исключений
Вот один из возможных вариантов решения задачи.
Код
class TooSmall is Exception {
method message { 'too small' }
}
class TooBig is Exception {
method message { 'too big' }
}
for TooSmall, TooBig -> $type {
{
$type.new.throw;
CATCH {
when TooSmall { say 'small' }
when TooBig { say 'big' }
}
}
}🦋 Исходный код можно найти в файле two-exceptions.raku.
Вывод
small
bigКомментарии
Цикл бросает
TooSmallна первом проходе иTooBigна втором, каждый внутри собственного блока со своимCATCH.У фазера
CATCHесть ветвьwhenдля каждого типа исключения. На каждом проходе срабатывает только та ветвь, которая соответствует брошенному типу, — поэтому первый проход печатаетsmall, а второйbig. Так один набор обработчиков по-разному реагирует на разные виды ошибок.