Ruby案例陈述

示例

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