case 语句
Ruby 使用 case
关键字作为 switch 语句。
根据 Ruby Docs :
case 语句由一个可选条件组成,该条件位于
case
的参数位置,以及零个或多个when
子句。匹配条件的第一个when
子句(或者如果条件为 null 则评估为布尔真值)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
语句可以与 Ranges 一起使用 :
case 17
when 13..19
puts "teenager"
end
case
语句可以与 Regexp 一起使用 :
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