Курс Raku / Об’єкти, введення-виведення та винятки / Винятки / М’які збої / Вправи / Пошук або «не знайдено»

Розв’язання: Пошук або «не знайдено»

Ось один із можливих варіантів розв’язання задачі.

Код

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.

Навігація курсом

Пошук або «не знайдено»   |   Запасне значення