when mit mehreren Werten
Teil des Abschnitts Logik und Ablauf 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 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