Case mit Klassen & Regex
Teil des Abschnitts Logik und Ablauf 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 abhängig davon, wie die Eingabe aussieht, eines dieser Labels auszugeben:
- Nur Ziffern,
number - Enthält
@:email - Beginnt mit einem Großbuchstaben,
name - Alles andere,
unknown
Prüfe die Regeln in der angegebenen Reihenfolge (also ist 123 number, 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 und Ablauf
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler