Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Исключения / Мягкие сбои / Exercises / Поиск или «не найдено»
Решение: Поиск или «не найдено»
Вот один из возможных вариантов решения задачи.
Код
sub lookup($key) {
fail 'no such key' if $key ne 'a';
return 100;
}
my $r = lookup('z');
if $r.defined {
say $r;
}
else {
say 'not found';
say "reason: {$r.exception.message}";
}🦋 Исходный код можно найти в файле lookup.raku.
Вывод
not found
reason: no such keyКомментарии
lookup('z')вызываетfail, поэтому возвращает неопределённыйFailure.Поскольку результат не определён, программа печатает
not found, а не пытается воспользоваться сбойным значением.Failureвсё же несёт в себе исключение, описывающее, что пошло не так.$r.exceptionизвлекает его — а заодно помечает сбой как обработанный, так что позже он уже не взорвётся, — а.messageчитает текст, переданный вfail:no such key.