web-dev-qa-db-fra.com

Comment vérifier si une variable est une instance d'une classe?

En Java, vous pouvez faire instanceof. Existe-t-il un Ruby équivalent?

61
NullVoxPopuli

C'est presque exactement pareil. Vous pouvez utiliser Object's instance_of? méthode:

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

Ruby a également le is_a? et kind_of? méthodes (ces 2 sont des alias et fonctionnent exactement de la même façon), qui renvoie true est l'une des correspondances de superclasses:

"a".is_a? String # => true
"a".is_a? Object # => true
124
John Topley

kind_of? et is_a? sont synonymes. Ils sont l'équivalent de Ruby au instanceof de Java.

instance_of? est différent en ce qu'il ne renvoie true que si l'objet est une instance de cette classe exacte, pas une sous-classe.

13
user3622081

Regardez instance_of? et kind_of? méthodes. Voici le lien doc http://Ruby-doc.org/core/classes/Object.html#M000372

6
Anand Shah

J'ai eu du succès avec klass, qui retourne l'objet classe. Cela semble être spécifique à Rails.

Exemple d'utilisation:

class Foo
end

Foo.new.klass
# => Foo

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

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

Il existe également une méthode qui accomplit cela: Object.is_a? , qui prend l'objet classe comme argument et renvoie vrai si self est une instance de la classe ou une instance d'une sous-classe.

5
Steven