Dis que je charge du code dans irb
comme ce qui suit:
class MyClass
def m
#... something
end
def a
#... something
end
end
Comment puis-je obtenir une liste de seulement mes méthodes disponibles? Si je cours MyClass.new.methods
Je reviens tout de la disponible instance methods
.
J'aimerais juste voir: :m, :a
En outre, si mon methods
ne sont pas enveloppés dans un class
?
def x
#... something
end
def z
#... something
end
Comment voir ce qui est disponible? self.methods
(fonctionnement: methods
) ne liste même pas mes méthodes.
Réponses:
1 pour la réponse № 1Faites comme ci-dessous en utilisant Module#instance_methods
:
Retourne un tableau contenant les noms desméthodes d'instance publique et protégée dans le récepteur. Pour un module, ce sont les méthodes publiques et protégées; pour une classe, ce sont les méthodes d'instance (pas de singleton). Sans argument, ou avec un argument false, les méthodes d’instance dans mod sont renvoyées, sinon les méthodes des superclasses mod et mod sont renvoyées.
class MyClass
def m
#... something
end
def a
#... something
end
end
MyClass.instance_methods(false)
# => [:m, :a]
Si vous définissez des méthodes au niveau supérieur comme ci-dessous, elles deviendront privé méthodes d'instance du Object
classe. Donc j'utiliserais alors Module#private_instance_methods
Retourne une liste des méthodes d'instances privées définies dans mod. Si le paramètre facultatif n'est pas false, les méthodes de tous les ancêtres sont incluses.
def x
#... something
end
def z
#... something
end
Object.private_instance_methods(false)
# => [:x, :z]
1 pour la réponse № 2
C'est un petit truc que j'utilise souvent, surtout si j'essaie de travailler avec un objet d'une bibliothèque que je n'ai pas écrit:
obj = MyClass.new
obj.methods.sort - 0.methods # => [:a, :m]
Le nombre 0
a un petit ensemble de méthodes qui ne sont pour la plupart que des outils Ruby standard que vous ne voulez pas voir. Vous pouvez le faire. Object.new
au lieu de 0
et ce serait mieux parce que vous seriez capable de voir des méthodes comme succ
, mais ce serait plus taper.
L'avantage de cela sur MyClass.instance_methods(false)
est qu'il montre les méthodes incluses dans les superclasses, les méthodes incluses dans les modules et les méthodes définies dynamiquement. En outre, vous avez généralement un objet que vous inspectez plutôt qu'une classe.