Курс языка программирования 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

Комментарии

  1. lookup('z') вызывает fail, поэтому возвращает неопределённый Failure.

  2. Поскольку результат не определён, программа печатает not found, а не пытается воспользоваться сбойным значением.

  3. Failure всё же несёт в себе исключение, описывающее, что пошло не так. $r.exception извлекает его — а заодно помечает сбой как обработанный, так что позже он уже не взорвётся, — а .message читает текст, переданный в fail: no such key.

Навигация по курсу

Поиск или «не найдено»   |   Запасное значение