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