Ruby 中的 case 语句非常强大,首先我们来看一个基本用法:
grade = case
when point >= 85: 'A'
when point >= 70 && point < 80: 'B'
when point >= 60 && point < 70: 'C'
when point < 60: 'D'
else 'E'
end
这里 case 语句的作用和 if 表达式类似, case 语句的返回值就是最后一个执行的表达式的值。和 if 语句类似,如果写在同一行的话需要加 then 或冒号。
另一种也是最常用的形式是在 case 后列出目标,然后每个语句依次和目标比较:
case input_line
when "debug"
print "We are in debug mode."
when /p\s+(\w+)/
dump_variable($1)
when "quit", "exit"
exit
else
print "Illegal command: #{input_line}"
end
另一个例子:
Season = case month
when 3..5 : "Spring"
when 6..8 : "Summer"
when 9..11: "Autumn"
when 12..2: "Winter"
else "Error"
end
Ruby 提供了一个运算符 === ,只要一个类提供了 === 方法,那这个类的对象就可以出现在 case 语句中。例如对于正则表达式定义了 === 为模式匹配。
Ruby 中,所有类的基类是 Class 类,所有类实例都是 Class 类的实例( to-do )。它定义 === 的含义为为参数所提供是否为实例的类或父类。
case shape
when Square, Rectangle
# ...
when Circle
# ...
when Triangle
# ...
else
# ...
end