EDIT: Cette réponse, c'est mieux. Apparemment, Ruby a construit dans cette, et j'ai un peu raté. Ma réponse de gauche de référence, peu importe.
Classes Ruby répondre aux méthodes instance_methods et public_instance_methods. En Ruby 1.8, la première répertorie tous les méthode d'instance des noms dans un tableau de chaînes de caractères, et la deuxième restreint à des méthodes publiques. Le second comportement est ce que vous souhaitez probablement, depuis respond_to?
limite à des méthodes publiques par défaut, aussi bien.
Foo.public_instance_methods.include?('bar')
En Ruby 1.9, cependant, ces méthodes retournent des tableaux de symboles.
Foo.public_instance_methods.include?(:bar)
Si vous avez l'intention de le faire souvent, vous pouvez étendre Module
d'inclure une méthode raccourci. (Il peut paraître étrange de les assigner à Module
au lieu de Class
, mais puisque c'est là que l' instance_methods
méthodes vivre, il est préférable de garder en ligne avec le modèle.)
class Module
def instance_respond_to?(method_name)
public_instance_methods.include?(method_name)
end
end
Si vous souhaitez soutenir à la fois Ruby 1.8 et Ruby 1.9, ce serait un endroit idéal pour ajouter de la logique de recherche de chaînes de caractères et de symboles, comme bien.