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.