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 gegen Klassen und reguläre Ausdrücke: beides über den ===-Operator, den when unter der Haube aufruft.
Verwenden Sie den Abgleich nach Klassen, um je nach Art des erhaltenen Wertes 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) # a whole number
puts describe(3.14) # a decimal
puts describe("hi") # some textVergleiche mit einem regulären Ausdruck, um basierend auf der Form eines Strings, einer Telefonnummer, einer E-Mail oder eines Datums zu verzweigen:
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
endDies ist weitaus sauberer als eine Kette von is_a? oder match? Aufrufen in if/elsif.
Aufgabe
EinfachLies eine einzelne Zeile der Eingabe. Verwende eine case-Anweisung, um eines dieser Labels auszugeben, basierend darauf, wie die Eingabe aussieht:
- Nur Ziffern,
number - Enthält
@:email - Beginnt mit einem Großbuchstaben,
name - Alles andere,
unknown
Überprüfe die Regeln in der aufgeführten Reihenfolge (so ist 123 number, nicht unknown; kevin@coddy.tech ist email; Alice ist name).
Für die Eingabe kevin@coddy.tech ist die Ausgabe email.
Spickzettel
Rubys case/when prüft gegen Klassen und reguläre Ausdrücke, wobei intern === verwendet wird.
Abgleich nach Klasse:
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
endAbgleich nach Regex:
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
endProbier 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