Ruby uses the case keyword for switch statements.
As per the Ruby Docs:
Case statements consist of an optional condition, which is in the position of an argument to case, and zero or more when clauses. The first when clause to match the condition (or to evaluate to Boolean truth, if the condition is null) “wins”, and its code stanza is executed. The value of the case statement is the value of the successful when clause, or nil if there is no such clause.
A case statement can end with an else clause. Each when a > statement can have multiple candidate values, separated by commas.
Example:
case x
when 1,2,3
puts "1, 2, or 3"
when 10
puts "10"
else
puts "Some other number"
end
Shorter version:
case x
when 1,2,3 then puts "1, 2, or 3"
when 10 then puts "10"
else puts "Some other number"
end
The value of the case clause is matched with each when clause using the === method (not ==). Therefore it can be used with a variety of different types of objects.
A case statement can be used with Ranges:
case 17
when 13..19
puts "teenager"
end
A case statement can be used with a Regexp:
case "google"
when /oo/
puts "word contains oo"
end
A case statement can be used with a Proc or lambda:
case 44
when -> (n) { n.even? or n < 0 }
puts "even or less than zero"
end
A case statement can be used with Classes:
case x
when Integer
puts "It's an integer"
when String
puts "It's a string"
end
By implementing the === method you can create your own match classes:
class Empty
def self.===(object)
!object or "" == object
end
end
case ""
when Empty
puts "name was empty"
else
puts "name is not empty"
end
A case statement can be used without a value to match against: