A instrução case estabelece a correspondência da expressão case com cada um dos resultados da expressão when usando o operador de correspondências ===. Pode haver várias cláusulas when, mas somente o corpo da primeira correspondência é avaliado. Se nenhuma cláusula when corresponder e o programador tiver que proporcionar a cláusula else, este corpo será avaliado. Se não houver nenhuma correspondência e nenhuma cláusula else, a expressão case retorna zero.
case graus_em_kelvin when 0..273 puts "sólido" when 274..372 puts "líquido" else puts "gás" end
A construção case...when..else..end determina a correspondência com o método ===. O método herdado === padrão de Object é um teste de igualdade que usa equal? que realiza igualdade estrita de objetos. Este método é implementado como um alias. No entanto, a redefinição do método equals? em uma subclasse não alterará o comportamento do método === herdado padrão.
Muitas classes de núcleo como RegExp e Range oferecem os métodos === que estabelecem a correspondência de grupos inteiros de objetos.
case "olá" when /^ye/ puts "yee-haw" when /^he/ puts "hee-haw" end
Quando a correspondência é realizada, o objeto da expressão when é o invocante e o objeto da expressão case é o argumento. No exemplo acima, a correspondência bem-sucedida é atingida com a seguinte expressão: /^he/ === "olá".
Como a maioria das formas especiais do Ruby, a expressão case...when...else...end retorna seu resultado. O resultado da última expressão avaliada dentro do bloco será
puts case x when 0...10 puts "isto não é um valor" 0 # mas será se x estiver entre 0 e 10 when 10...100 1 when 100...1000 2 end