2009-10-29 5 views
1
Apple < ActiveRecord:Base 
Orange < ActiveRecord:Base 

piece_of_fruit = Apple.new 

Je veux savoir si piece_of_fruit est un Apple ou un Orange-même si les deux sont dérivés de ActiveRecord:Base.Réflexion sur la classe de l'ancêtre immédiat

Existe-t-il une méthode de réflexion qui me dira la classe suivante dans l'arbre d'héritage (Apple/Orange).

Que se passe-t-il si je veux regarder chaque étape successive dans la hiérarchie d'héritage après cela, en commençant par ActiveRecord: Base dans ce cas?

Répondre

0

is_a et kind_of sont synonymes, vous pouvez écrire une des opérations suivantes:

piece_of_fruit.is_a?(Apple) 

ou

piece_of_fruit.kind_of?(Apple) 
2

Que diriez-vous

piece_of_fruit.kind_of?(Apple) 
2

La réponse à votre première question, comme d'autres ont posté, est

piece_of_fruit.is_a? Apple 

La réponse à la deuxième question (« Que faire si je veux regarder à chaque étape successive dans la hiérarchie d'héritage? ») Est d'utiliser les méthodes class et superclass.

piece_of_fruit.class 
=> Apple 
piece_of_fruit.class.superclass  
=> ActiveRecord::Base 
Questions connexes