Caso Ruby … quando

Ao usar o caso … quando em rubi é importante observar a forma como as classes são comparadas

1 === 1
=> true
Fixnum === Fixnum
=> false

então

obj = 'hello'
case obj.class
when String
print('It is a string')
when Fixnum
print('It is a number')
else
print('It is not a string')
end

Irá imprimir “Não é uma string”.

Contudo,

obj = 'hello'
case obj # was case obj.class
when String
print('It is a string')
when Fixnum
print('It is a number')
else
print('It is not a string')
end

Funcionará da maneira que esperamos.

Isso ocorre porque o ===operador foi definido para que retorne verdadeiro se você aplicá-lo a uma classe e a uma instância dessa classe.