case z klasami i wyrażeniami regularnymi
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 38 z 56.
Użyto instrukcji case z zakresami. Ta sama instrukcja dopasowuje również klasy i wyrażenia regularne: w obu przypadkach za pomocą operatora ===, który when wywołuje wewnętrznie.
Dopasuj do klasy, aby rozgałęzić działanie w zależności od rodzaju otrzymanej wartości:
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) # liczba całkowita
puts describe(3.14) # liczba dziesiętna
puts describe("hi") # jakiś tekstDopasuj wyrażenie regularne, aby rozgałęzić działanie na podstawie formatu ciągu znaków, numeru telefonu, adresu e-mail lub daty:
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
endTo znacznie czytelniejsze rozwiązanie niż łańcuch wywołań is_a? lub match? w if/elsif.
Wyzwanie
ŁatwyOdczytaj jeden wiersz danych wejściowych. Użyj instrukcji case, aby wypisać jedną z tych etykiet w zależności od tego, jak wyglądają dane wejściowe:
- Same cyfry,
number - Zawiera
@:email - Zaczyna się wielką literą,
name - Wszystko inne,
unknown
Sprawdzaj reguły w podanej kolejności (czyli 123 to number, a nie unknown; kevin@coddy.tech to email; Alice to name).
Dla danych wejściowych kevin@coddy.tech wynikiem jest email.
Spróbuj swoich sił
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocenPoćwicz samodzielnie: Kompilator Ruby online