使用类和正则表达式的 case 语句
本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 38 课,共 56 课。
你已经使用 case 和范围。相同的语句也会匹配类和正则表达式:两者都通过 === 运算符进行匹配,而 when 在底层会调用这个运算符。
根据类进行匹配,以判断你得到的值属于哪种类型:
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) # 一个整数
puts describe(3.14) # 一个小数
puts describe("hi") # 一些文本使用正则表达式匹配字符串的形态,以区分电话号码、电子邮件地址和日期:
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
end这比在 if/elsif 中连续调用 is_a? 或 match? 清晰得多。
挑战
简单读取一行输入。使用 case 语句,根据输入的样子打印以下标签之一:
- 全部是数字:
number - 包含
@:email - 以大写字母开头:
name - 其他情况:
unknown
按列出的顺序检查规则(所以 123 是 number,而不是 unknown;kevin@coddy.tech 是 email;Alice 是 name)。
输入 kevin@coddy.tech 时,输出是 email。
亲手试试
input = gets.chomp
# TODO: 使用 case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Ruby 在线编译器