Case mit Klassen & Regex
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 38 von 56.
Sie haben case mit Bereichen verwendet. Dieselbe Anweisung prüft auch auf Klassen und reguläre Ausdrücke: beides über den ===-Operator, den when unter der Haube aufruft.
Vergleichen Sie nach Klasse, um je nach Art des erhaltenen Werts zu verzweigen:
def describe(value)
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end
end
puts describe(42) # eine ganze Zahl
puts describe(3.14) # eine Dezimalzahl
puts describe("hi") # etwas TextMache ein Pattern Matching mit einem regulären Ausdruck, um je nach Form eines Strings zu verzweigen, z. B. eine Telefonnummer, eine E-Mail oder ein Datum:
def kind_of(text)
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end
endDas ist weit sauberer als eine Kette von is_a?- oder match?-Aufrufen in if/elsif.
Aufgabe
EinfachLies eine einzelne Eingabezeile ein. Verwende eine case-Anweisung, um eines dieser Labels auszugeben, je nachdem, wie die Eingabe aussieht (looks):
- Nur
digits,number - Enthält
@:email startsmit einemcapitalLetter,name- Alles andere,
unknown
Überprüfe die Regeln in der aufgelisteten Reihenfolge (sodass 123 number ist und nicht unknown; kevin@coddy.tech ist email; Alice ist name).
Für die Eingabe kevin@coddy.tech lautet die Ausgabe email.
Probier es selbst
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-KlassifiziererÜbe selbstständig: Online-Ruby-Compiler