¿Hay algo más idiomático que lo siguiente?
foo.class == String
ruby
idioms
typechecking
Davidchambers
fuente
fuente

is_a?es en realidad el idioma más apropiado para usar (y a menudo una verificación de tipeo como Andrew Grimm es incluso mejor). Una comparación de clases estricta suele ser un olor a código. en.wikipedia.org/wiki/Liskov_substitution_principleString, sino también conIntegeryFloat. ¿También funciona paraDecimal? (el intérprete más destacado de texto sublime la sintaxis diferente paraDecimallo que me hace sospechar)Un enfoque más tipo pato sería decir
to_strindica que la clase de un objeto puede no ser un descendiente real de String, pero el objeto en sí es muy parecido a una cadena (¿fibroso?).fuente
fooo bien habrátrue,falseo una cadena de vainilla, pero es bueno aprender soluciones más generales.to_stroto_s? Los dos son ligeramente diferentes.Tu puedes hacer:
Y el más general:
fuente
kind_ofmás general? Parecen ser sinónimo:is_a.instance_of?lugar deis_a?.o
si solo te importa si se deriva de
Stringalgún lugar en su cadena de herenciafuente
Además de las otras respuestas, Class define el método === para probar si un objeto es una instancia de esa clase.
fuente
Creo que una mejor manera es crear algunos métodos predicados. Esto también guardará su "Punto único de control".
La forma de escribir más pato;)
fuente
"string".is_a?(String). Parece que estás reinventando la rueda. También hayclass,instance_of,kind_of, etc ... mala idea parche mono de laObjectclase, por no hablar de que es innecesario.pre_check("test".is_string?)Ahora el requisito de su proyecto cambiará y cada String con tres caracteres o más ya no se define como String (sé que es inusual;)) Ahora puede cambiar su propio método fácilmente.