?
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?
?