/ / Comment obtenir une liste de SEULEMENT mes méthodes disponibles dans IRB? - rubis

Comment obtenir une liste de SEULEMENT mes méthodes disponibles dans IRB? - rubis

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 № 1

Faites 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.