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