Raku kurss / Objekti, ievade/izvade un izņēmumi / Izņēmumi / Paša veidoti izņēmumi / Exercises / Pārāk liels
Risinājums: Pārāk liels
Šeit ir iespējams risinājums uzdevumam.
Kods
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}.";
}
}
}🦋 Atrodiet programmu failā too-big.raku.
Izvade
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.Komentāri
TooBig is Exceptionpadara klasi par izmetamu izņēmumu. Tā nes divus datu gabalusvalueunlimit, un tās metodemessageabus iepin ziņotajā tekstā..throwceļ izņēmumu, unwhen TooBigtam atbilst pēc tipa. Apstrādātājs dara vairāk nekā tikai izdrukā paziņojumu: tas nolasa atribūtulimittieši no noķertā objekta, lai dotu noderīgu norādi. Tieši ar to paša definēts izņēmums ir pārāks par vienkāršu virkni — apstrādātājs saņem strukturētus datus, ar ko var rīkoties.Izņēmums tiek izmests tikai tad, kad
$value > $limit. Vērtībai30izņēmums netiek celts un cikla ķermenis izpildās līdz savamsay, izdrukājot, ka vērtība ir robežas ietvaros. Vērtībām99un60thrownostrādā, tāpēc šissaytiek izlaists un tā vietā to apstrādāCATCH. Cikla ķermenis pats ir tas bloks, koCATCHsargā, tāpēc noķerts izņēmums beidz tikai pašreizējo iterāciju — cikls tad vienkārši virzās uz nākamo vērtību.