Case con classi e Regex
Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 38 di 56.
Hai usato case con gli intervalli. La stessa istruzione verifica anche le classi e le espressioni regolari: entrambe tramite l'operatore === che when chiama internamente.
Abbina la classe per scegliere in base al tipo di valore che hai ottenuto:
def describe(value)
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end
end
puts describe(42) # un numero intero
puts describe(3.14) # un numero decimale
puts describe("hi") # del testoUsa un'espressione regolare per diramare in base alla forma di una stringa: un numero di telefono, un'email, una data:
def kind_of(text)
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end
endQuesto è molto più pulito di una catena di chiamate a is_a? o match? in if/elsif.
Sfida
FacileLeggi una singola riga di input. Usa un'istruzione case per stampare una di queste etichette in base a come sembra l'input:
- Solo cifre,
number - Contiene
@:email - Inizia con una lettera maiuscola,
name - Qualsiasi altra cosa,
unknown
Controlla le regole nell'ordine indicato (quindi 123 è number, non unknown; kevin@coddy.tech è email; Alice è name).
Per l'input kevin@coddy.tech, l'output è email.
Provalo tu
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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