¿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 conInteger
yFloat
. ¿También funciona paraDecimal
? (el intérprete más destacado de texto sublime la sintaxis diferente paraDecimal
lo que me hace sospechar)Un enfoque más tipo pato sería decir
to_str
indica 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
foo
o bien habrátrue
,false
o una cadena de vainilla, pero es bueno aprender soluciones más generales.to_str
oto_s
? Los dos son ligeramente diferentes.Tu puedes hacer:
Y el más general:
fuente
kind_of
más general? Parecen ser sinónimo:is_a
.instance_of?
lugar deis_a?
.o
si solo te importa si se deriva de
String
algú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 laObject
clase, 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.