2010-08-06 14 views

Respuesta

103

Es casi exactamente lo mismo. Puede utilizar Object 's instance_of? método:

"a".instance_of? String # => true 
"a".instance_of? Object # => false 

Rubí también tiene las is_a? y kind_of? métodos (estos 2 son los alias, y trabajar exactamente el mismo), que devuelve true es uno de los partidos superclases:

"a".is_a? String # => true 
"a".is_a? Object # => true 
+1

N.B. Hasta donde sé, esto devuelve falso si 'self' es una instancia de una subclase del argumento. –

4

He tenido éxito con klass, que devuelve el objeto de la clase. Esto parece ser específico de Rails. uso

muestra:

class Foo 
end 

Foo.new.klass 
# => Foo 

Foo.new.klass == Foo 
# => true 

Foo.new.klass == "Foo" 
# => false 

También hay un método que logra esto: Object.is_a?, que tiene el objeto de clase como un argumento y devuelve verdadero si self es una instancia de la clase o una instancia de una subclase .

+3

Hay un método 'Object # class': http://apidock.com/ruby/Object/class –

+0

Ojalá pudiera elegir dos respuestas correctas. Array no tiene klass como método, pero tiene instance_of pero active_record abjects tiene .klass, creo. – NullVoxPopuli

+0

'Array.class' debería funcionar igual de bien. Me confundí en mi respuesta porque la biblioteca que estoy utilizando amplía la clase 'Object' con el método' clase'. –

7

kind_of? y is_a? son sinónimos. Son el equivalente de Ruby al instanceof de Java.

instance_of? es diferente, ya que solo devuelve true si el objeto es una instancia de esa clase exacta, no una subclase.

Cuestiones relacionadas