Eine case-Anweisung vergleicht das Ergebnis des case-Ausdrucks mit allen Ergebnissen des when-Ausdrucks unter Verwendung des ===-Vergleichsoperators. Es kann eine beliebige Anzahl an when-Anweisungen geben, aber nur der Anweisungsblock des ersten passenden Ausdrucks der gefunden wurde, wird ausgewertet. Passt keine der when-Anweisungen und eine else-Anweisung existiert, wird deren Anweisungsblock verarbeitet. Existiert weder ein when, noch ein else und es wurde kein passender Ausdruck gefunden, liefert die case-Anweisung nil zurück.
case degrees_in_kelvin when 0..273 puts "solid" when 274..372 puts "liquid" else puts "gas" end
Das Kosntrukt "case...when..else..end" evaluiert passende Ergebnisse mit der ===-Methode. Die Standard ===-Methode (geerbt von Object) ist ein Gleichheitstest unter Verwendung von "equal?" welches strikte Objektgleichheit prüft. Diese Methode ist als Alias implementiert. Die Neudefinition der Methode "equals?" auf Subklassenebene ändert nicht das Verhalten der Standard ===-Methode.
Viele Kernklassen, wie z.B. RegExp und Range bieten ===-Methoden, die ganze Gruppen von Objekten testen können.
case "hello" when /^ye/ puts "yee-haw" when /^he/ puts "hee-haw" <b4>end</b4>
Wenn eine Überprüfung ausgeführt wird, stellt das Objekt des "when"-Ausdrucks den Aufrufenden und das Objekt des "case"-Ausdrucks das Argument dar. Im obigen Beispiel wird eine Übereinstimmung mit dem folgenden Ausdruck gefunden: /^he/ === "hello".
Wie viele andere spezielle Ruby-Ausdrücke auch, liefert der "case...when...else...end"-Ausdruck sein Ergebnis zurück. Normalerweise ist es das Ergebnis des letzten in einem Block ausgewerteten Ausdrucks
puts case x
when 0...10
puts "this is not the value"
0 # but this will be if x is in between 0 and 10
when 10...100
1
when 100...1000
2
end