Как я могу проверить методы объекта Ruby? - PullRequest
19 голосов
/ 12 января 2011

Мне интересно, существует ли вызов метода Ruby, который показывает только методы, определенные объектом Ruby, из которого он вызывается, в отличие от всех методов, определенных его классами-предками, что, по-видимому, и делает methods.

Ответы [ 3 ]

32 голосов
/ 12 января 2011

methods принимает необязательный логический параметр, который указывает, следует ли также перечислять методы из класса объекта и его суперклассов или только одноэлементные методы объекта.Таким образом, вы можете сделать obj.methods(false), чтобы получить только одноэлементные методы, определенные в obj.

Если вам нужны методы, определенные классом объекта, но не методы, определенные его суперклассами, вы можете получить это, вызвавinstance_methods(false) в классе объекта, так что obj.class.instance_methods(false).

4 голосов
/ 12 января 2011

Я неравнодушен к obj.methods.sort, но некоторые другие ответы лучше в некоторых случаях, поскольку они описывают

Вы также можете использовать obj.methods.sort.grep /foo/, чтобы найти имена методов, соответствующие регулярному выражению. Это полезно, когда у вас есть представление о том, что вы ищете.

1 голос
/ 12 января 2011

У вас есть несколько вариантов - object.methods, object.public_methods, object.singleton_methods ... это зависит от того, что вы хотите. Так как они оба возвращают массив, вы можете попробовать что-то вроде:

# obj is the current object
parent = obj.class.superclass

methods = (obj.methods - parent.methods)
...