when với nhiều giá trị
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 39 trên 56.
Một mệnh đề when có thể khớp với nhiều giá trị, được phân tách bằng dấu phẩy. Nhánh sẽ chạy nếu đối tượng được so sánh bằng với bất kỳ giá trị nào trong số đó.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # cuối tuầnCách này gọn hơn nhiều so với việc nối các toán tử || trong câu lệnh if/elsif.
Bạn cũng có thể kết hợp nhiều kiểu giá trị trong một when: chuỗi (string), dải giá trị, mẫu regex, tất cả đều là những thứ phản hồi với ===:
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
endHãy chọn cách viết giúp bạn dễ nhìn ra từng nhánh ngay lập tức.
Thử thách
DễĐọc một ký tự (một dòng đầu vào). Dùng case với các nhánh when có nhiều giá trị để in ra một trong các kết quả sau:
vowel: đầu vào là một trong các ký tựa, e, i, o, u(không phân biệt chữ hoa chữ thường, trước tiên hãy chuyển đầu vào thành chữ thường)digit: đầu vào là một trong các ký tự0..9(dùng một khoảng)punctuation: đầu vào là một trong các ký tự.,,,!,?other: mọi trường hợp khác
Coi đầu vào là một chuỗi gồm một ký tự. Kiểm tra nhánh chữ số bằng một khoảng như "0".."9".
Với đầu vào E, đầu ra là vowel; với 7, đầu ra là digit; với !, đầu ra là punctuation.
Tự làm thử
ch = gets.chomp
# TODO: dùng case ch.downcase ... với các nhánh when có nhiều giá trị
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng xử lý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệu8Ra quyết định nâng cao
Trường hợp với lớp và Regexwhen với nhiều giá trịToán tử ba ngôiif / unless nội tuyếnÔn tập: bộ phân loại điểmTự luyện tập: Trình biên dịch Ruby online