Ruby将case关键字用于switch语句。
根据Ruby Docs:
Case语句由一个可选条件(位于和的参数的位置)case以及零个或多个when子句组成。when匹配条件的第一个子句(如果条件为空,则为布尔真值)或“ wins”,并执行其代码节。case语句的值是成功when子句的值,或者nil如果没有这样的子句的话。
case语句可以以else子句结尾。每个when语句可以有多个候选值,以逗号分隔。
例:
case x when 1,2,3 puts "1, 2, or 3" when 10 puts "10" else puts "Some other number" end
较短的版本:
case x when 1,2,3 then puts "1, 2, or 3" when 10 then puts "10" else puts "Some other number" end
case子句的值when使用===方法(不是==)与每个子句匹配。因此,它可以与各种不同类型的对象一起使用。
一个case语句可以与范围内使用:
case 17 when 13..19 puts "teenager" end
一个case语句可以用正则表达式中使用:
case "google" when /oo/ puts "word contains oo" end
一个case语句可以用一个Proc或lambda使用:
case 44 when -> (n) { n.even? or n < 0 } puts "even or less than zero" end
一个case语句可以带类的使用:
case x when Integer puts "It's an integer" when String puts "It's a string" end
通过实现该===方法,您可以创建自己的匹配类:
class Empty def self.===(object) !object or "" == object end end case "" when Empty puts "name was empty" else puts "name is not empty" end
一个case语句可以没有值来匹配使用:
case when ENV['A'] == 'Y' puts 'A' when ENV['B'] == 'Y' puts 'B' else puts 'Neither A nor B' end
一个case语句具有价值,所以你可以使用它作为方法的参数或在分配中:
description = case 16 when 13..19 then "teenager" else "" end