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