when mit mehreren Werten
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 (eine Eingabezeile) ein. Verwende ein case mit when-Zweigen mit mehreren Werten, um eines der folgenden Ergebnisse auszugeben:
vowel: Die Eingabe ist eines vona, e, i, o, u(ohne Beachtung der 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 Zeichenkette mit genau einem Zeichen. Teste den Ziffernzweig mithilfe eines Bereichs wie "0".."9".
Für die Eingabe E lautet die Ausgabe vowel; für 7 lautet sie digit; für ! lautet sie 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
Ü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