Multi-Value when
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 39 von 56.
Eine einzelne when-Klausel kann mit jedem von mehreren Werten übereinstimmen, die durch Kommas getrennt sind. Der Zweig wird ausgeführt, wenn das Subjekt mit einem dieser Werte übereinstimmt.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # WochenendeDas ist viel sauberer als das Verketten von || in einem if/elsif.
Sie können Werttypen in einem when auch mischen: Strings, Ranges, Regex-Muster – es sind einfach alles Dinge, die auf === reagieren:
def describe(x)
case x
when 0, nil then "empty"
when 1..9 then "small"
when 10..99 then "medium"
when /^huge:/i then "flagged huge"
end
endWählen Sie die Formen, die jeden Zweig auf einen Blick leicht lesbar machen.
Aufgabe
EinfachLies ein einzelnes Zeichen ein (eine Zeile Eingabe). Verwende ein case mit Mehrwert-when-Zweigen, um eines der folgenden auszugeben:
vowel: Eingabe ist eines vona, e, i, o, u(ohne Berücksichtigung von Groß-/Kleinschreibung, konvertiere die Eingabe zuerst in Kleinbuchstaben)digit: Eingabe ist eines von0..9(verwende einen Bereich)punctuation: Eingabe ist eines von.,,,!,?other: alles andere
Behandle die Eingabe als Zeichenkette aus einem einzelnen Zeichen. Teste den digit-Zweig mit einem Bereich wie "0".."9".
Für die Eingabe E lautet die Ausgabe vowel; für 7 ist es digit; für ! ist es punctuation.
Probier es selbst
ch = gets.chomp
# TODO: case ch.downcase ... mit when-Zweigen für mehrere Werte
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