Corso di Raku / Oggetti, input/output ed eccezioni / Eccezioni / Guasti morbidi / Exercises / Trovato o non trovato

Soluzione: Trovato o non trovato

Ecco una possibile soluzione del compito.

Codice

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}";
}

🦋 Trova il programma nel file lookup.raku.

Output

not found
reason: no such key

Commenti

  1. lookup('z') chiama fail, quindi restituisce un Failure non definito.

  2. Poiché il risultato non è definito, il programma stampa not found invece di provare a usare il valore fallito.

  3. Un Failure porta comunque con sé l’eccezione che descrive che cosa è andato storto. $r.exception la recupera — il che segna anche il fallimento come gestito, così non esploderà più tardi — e .message legge il testo passato a fail, no such key.

Trovato o non trovato   |   Un valore di ripiego