Курс 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Коментарі
lookup('z')викликаєfail, тож повертає невизначенийFailure.Оскільки результат невизначений, програма виводить
not found, а не намагається скористатися невдалим значенням.Failureусе одно несе виняток, який описує, що пішло не так.$r.exceptionдістає його — що водночас позначає збій як оброблений, тож пізніше він не вибухне, — а.messageчитає текст, переданий доfail, тобтоno such key.