variable una que porcentaje operador guide flotantes conversiones ruby idioms typechecking

una - ruby guide



Compruebe si una variable es una cadena en Ruby (6)

¿Hay algo más idiomático que el siguiente?

foo.class == String


Además de las otras respuestas, Class define el método === para probar si un objeto es una instancia de esa clase.

  • clase de clase de o.
  • o.instance_of? c determina si o.class == c
  • o.is_a? c ¿Es una instancia de c o cualquiera de sus subclases?
  • o.kind_of? c sinónimo de * is_a? *
  • c === o para una clase o módulo, determine si * o.is_a? c * ( String === "s" devuelve verdadero)

Creo que estás buscando por instance_of? . is_a? y kind_of? devolverá verdadero para instancias de clases derivadas.

class X < String end foo = X.new foo.is_a? String # true foo.kind_of? String # true foo.instance_of? String # false foo.instance_of? X # true


Creo que una mejor manera es crear algunos métodos predicados. Esto también guardará su "Punto único de control".

class Object def is_string? false end end class String def is_string? true end end print "test".is_string? #=> true print 1.is_string? #=> false

Cuanto más pato escribir a máquina;)


Tu puedes hacer:

foo.instance_of?(String)

Y el más general:

foo.kind_of?(String)


Un enfoque más tipado sería decir

foo.respond_to?(:to_str)

to_str indica que la clase de un objeto puede no ser un descendiente real de la cadena, pero el objeto en sí es muy parecido a una cadena (¿fibroso?).


foo.instance_of? String

o

foo.kind_of? String

si solo te importa si se deriva de String alguna parte de su cadena de herencia