Ruby использует case
для написания операторов switch.
Согласно Ruby Docs :
Операторы Case состоят из необязательного условия, которое находится в
положение аргумента для case
и ноль или более when
предложений.
Первое предложение when
для соответствия условию (или для оценки
Булева правда, если условие ноль) «выигрывает», и его код строфа
выполнен. Значение оператора 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
И как этот блог Honeybadger описывает Ruby Case;
Может использоваться с Диапазоны :
case 5
when (1..10)
puts "case statements match inclusion in a range"
end
## => "case statements match inclusion in a range"
Может использоваться с Regex :
case "FOOBAR"
when /BAR$/
puts "they can match regular expressions!"
end
## => "they can match regular expressions!"
Может использоваться с Procs и Lambdas :
case 40
when -> (n) { n.to_s == "40" }
puts "lambdas!"
end
## => "lambdas"
Также, может использоваться с вашими классами соответствия:
class Success
def self.===(item)
item.status >= 200 && item.status < 300
end
end
class Empty
def self.===(item)
item.response_size == 0
end
end
case http_response
when Empty
puts "response was empty"
when Success
puts "response was a success"
end