Menu
CoddyTech

使用类和正则表达式的 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? 清晰得多。

challenge icon

挑战

简单

读取一行输入。使用 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器