2012-06-20 11 views
6

En Sinatra, podría probar some_object.class.name == "Hash". Ahora, después de un envío, tengo que probarlo, más == "ActiveSupport :: HashWithIndifferentAccess", para que mi código funcione. ¿Por qué es eso, y tengo que actualizar todos los lugares donde ocurre esa comparación, o hay una manera más fácil? graciasPrueba de rieles para tipo hash

Respuesta

15

A partir de los documentos de ActiveSupport::HashWithIndifferentAccess:

Esta clase tiene la semántica dudosos y sólo tenemos para que la gente puede escribir params [: clave] en lugar de params [ 'clave'] y obtener el mismo valor para ambas teclas.

Por lo tanto, es una clase que hereda de Hash para permitirle pasar un símbolo o una cadena como la clave y devolver el mismo valor para cualquiera.

Para solucionar (y limpiar) las pruebas, usted podría utilizar el siguiente:

some_object.is_a? Hash 

Esto devolverá cierto si se trata de un hash o un descendiente de Hash.

+0

funciona muy bien, gracias! – dt1000

Cuestiones relacionadas