Мне интересно, есть ли вызов метода Ruby, который показывает только методы, определенные объектом Ruby, из которого он вызвал, в отличие от всех методов, определенных его классами предков, что и делает methods
.
Как проверить методы объекта Ruby?
Ответ 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)