when con più valori
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 39 di 56.
Una singola clausola when può corrispondere a uno qualsiasi di più valori, separati da virgole. Il ramo viene eseguito se il soggetto è uguale a uno qualsiasi di essi.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # fine settimanaÈ molto più pulito che concatenare || in un if/elsif.
Puoi anche combinare diversi tipi di valori in un unico when: stringhe, intervalli, pattern regex: sono tutte cose che rispondono a ===:
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
endScegli le forme che rendono ogni ramo facile da leggere a colpo d’occhio.
Sfida
FacileLeggi un singolo carattere (una riga di input). Usa un case con rami when a valori multipli per stampare uno tra:
vowel: l'input è uno traa, e, i, o, u(senza distinzione tra maiuscole e minuscole, converti prima l'input in minuscolo)digit: l'input è uno tra0..9(usa un intervallo)punctuation: l'input è uno tra.,,,!,?other: qualsiasi altra cosa
Considera l'input come una stringa di un singolo carattere. Verifica il ramo delle cifre usando un intervallo come "0".."9".
Per l'input E, l'output è vowel; per 7 è digit; per ! è punctuation.
Provalo tu
ch = gets.chomp
# TODO: case ch.downcase ... con rami when a valori multipli
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Panoramica dei metodi delle stringheInterpolazione di stringheIterare sulle stringheDividere e unireRiepilogo - Tessitore di stringhe4Blocchi, Proc e Lambda
Che cos’è un Block?do..end vs parentesi graffeLa keyword yieldParametri del BlockProc e LambdaRiepilogo - Iteratore personalizzato7Hash in Ruby - Parte 2
Hash.new con valori predefinitiIterare sugli hashHash annidatiUnire e trasformareRipasso - Contatore di frequenza10Progetto - Registri degli studenti
Panoramica del progettoAggiungere uno studente2Intervalli
Che cos'è un intervallo?Metodi degli intervalliIntervalli in Case / WhenRiepilogo - Esercitarsi con gli intervalli5La potenza di Enumerable
Select e RejectConcatenare MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRiepilogo - Pipeline di dati8Decisioni avanzate
Case con classi e Regexwhen con più valoriOperatore ternarioif / unless inlineRiepilogo - classificatore dei votiEsercitati da solo: Compilatore Ruby online