Kurso de Raku / Objektoj, en- kaj eligo kaj escepto / Esceptoj / Propraj esceptoj / Exercises / Tro granda
Solvo: Tro granda
Jen ebla solvo de la tasko.
Kodo
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}.";
}
}
}🦋 Vi povas trovi la fontkodon en la dosiero too-big.raku.
Eligo
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.Komentoj
TooBig is Exceptionfaras la klason ĵetebla escepto. Ĝi portas du pecojn da datumoj,valuekajlimit, kaj ĝia metodomessageteksas ambaŭ en la raportitan tekston..throwlevas la escepton, kajwhen TooBigkongruas kun ĝi laŭ tipo. La traktilo faras pli ol presi la mesaĝon: ĝi legas la atributonlimitrekte de la kaptita objekto por doni utilan aludon. Jen la avantaĝo de propra escepto super simpla ĉeno — la traktilo ricevas strukturitajn datumojn, laŭ kiuj ĝi povas agi.La escepto estas ĵetata nur, kiam
$value > $limit. Por30, neniu escepto estas levata kaj la buklokorpo ruliĝas ĝis siasay, presante, ke la valoro estas ene de la limo. Por99kaj60, lathrowekfunkcias, do tiusayestas preterlasata kaj laCATCHtraktas ĝin anstataŭe. La korpo deforestas mem la bloko, kiun laCATCHgardas, do kaptita escepto finas nur la nunan iteracion — la buklo poste simple moviĝas al la sekva valoro.