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