Corso di Raku / Oggetti, input/output ed eccezioni / Eccezioni / Eccezioni personalizzate / Exercises / Troppo grande
Soluzione: Troppo grande
Ecco una possibile soluzione del compito.
Codice
class TooBig is Exception {
has $.value;
has $.limit;
method message {
"Value $.value exceeds the limit of $.limit";
}
}
my $limit = 50;
for 30, 99, 60 -> $value {
TooBig.new(value => $value, limit => $limit).throw if $value > $limit;
say "Value $value is within the limit";
CATCH {
when TooBig {
say .message;
say "Try a value up to {.limit}.";
}
}
}🦋 Trova il programma nel file too-big.raku.
Output
Value 30 is within the limit
Value 99 exceeds the limit of 50
Try a value up to 50.
Value 60 exceeds the limit of 50
Try a value up to 50.Commenti
TooBig is Exceptionrende la classe un’eccezione sollevabile. Porta con sé due dati,valueelimit, e il suo metodomessageintreccia entrambi nel testo riferito..throwsolleva l’eccezione ewhen TooBigla riconosce dal tipo. Il gestore fa più che stampare il messaggio: legge l’attributolimitdirettamente dall’oggetto intercettato per dare un suggerimento utile. È questo il vantaggio di un’eccezione personalizzata rispetto a una semplice stringa: il gestore riceve dati strutturati su cui può agire.L’eccezione viene sollevata solo quando
$value > $limit. Per30non viene sollevata alcuna eccezione e il corpo del ciclo arriva fino al suosay, stampando che il valore è entro il limite. Per99e60scatta ilthrow, quindi quelsayviene saltato e se ne occupa invece ilCATCH. Il corpo delforè esso stesso il blocco che ilCATCHsorveglia, quindi un’eccezione intercettata chiude solo l’iterazione corrente — e il ciclo passa poi semplicemente al valore successivo.