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