Multi-Value when
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 39 von 56.
Eine einzelne when-Klausel kann gegen jeden von mehreren Werten prüfen, getrennt durch Kommas. Der Zweig wird ausgeführt, wenn das Subjekt einem dieser Werte entspricht.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # weekendDas ist viel sauberer als das Verketten von || in einem if/elsif.
Sie können auch verschiedene Werttypen in einem when mischen: Strings, Ranges, Regex-Muster; sie alle sind einfach 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 mehrwertigen when-Zweigen, um eines der folgenden auszugeben:
vowel: Die Eingabe ist eines vona, e, i, o, u(unabhängig von Groß-/Kleinschreibung, wandle die Eingabe zuerst in Kleinbuchstaben um)digit: Die Eingabe ist eines von0..9(verwende einen Bereich)punctuation: Die Eingabe ist eines von.,,,!,?other: alles andere
Behandle die Eingabe als eine einstellige Zeichenkette. Teste den digit-Zweig mit einem Bereich wie "0".."9".
Für die Eingabe E ist die Ausgabe vowel; für 7 ist sie digit; für ! ist sie punctuation.
Spickzettel
Eine when-Klausel kann mehrere durch Kommas getrennte Werte abgleichen:
case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
endSie können Strings, Bereiche und Regex-Muster im selben case mischen:
case x
when 0, nil then "empty"
when 1..9 then "small"
when /^huge:/i then "flagged huge"
endProbier 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