Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Ausnahmen / Eigene Ausnahmen / Exercises / Zu groß
Lösung: Zu groß
Hier ist eine mögliche Lösung der Aufgabe.
Code
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}.";
}
}
}🦋 Du findest den Quellcode in der Datei too-big.raku.
Ausgabe
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.Kommentare
TooBig is Exceptionmacht aus der Klasse eine werfbare Ausnahme. Sie trägt zwei Daten mit sich,valueundlimit, und ihre Methodemessageverwebt beide im gemeldeten Text..throwlöst die Ausnahme aus, undwhen TooBigtrifft sie nach Typ. Die Behandlung tut mehr, als die Meldung auszugeben: Sie liest das Attributlimitdirekt vom gefangenen Objekt, um einen hilfreichen Hinweis zu geben. Das ist der Vorteil einer eigenen Ausnahme gegenüber einer schlichten Zeichenkette — die Behandlung erhält strukturierte Daten, mit denen sie arbeiten kann.Die Ausnahme wird nur geworfen, wenn
$value > $limit. Für30wird keine Ausnahme ausgelöst, und der Schleifenrumpf läuft bis zu seinemsayund gibt aus, dass der Wert innerhalb der Grenze liegt. Für99und60schlägt dasthrowzu, jenessaywird also übersprungen, und stattdessen behandelt dasCATCH. Der Rumpf derfor-Schleife ist selbst der Block, den dasCATCHbewacht, eine gefangene Ausnahme beendet also nur den laufenden Durchgang — die Schleife geht danach einfach zum nächsten Wert über.