Подтвердить что ты не робот

Как проверить методы объекта Ruby?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

methods = (obj.methods - parent.methods)