Getting method names for a Class


#1

There are so many methods in Object and Module that return arrays of
method names that it can be a bit confusing. Here’s a summary of my
current understanding. Is any of this wrong?

“instance_methods” is a method from Module.
Pass it true to include inherited methods (the default) and false to
exclude them.
To get the names of public instance methods in the class Foo, use
Foo.instance_methods.

“methods” is a method from Object.
Pass it true to get instance methods (the default) and false to get
singleton methods.
A singleton method on a Ruby Class is essentially like a static method
in Java.
To get the names of public class methods in the class Foo, use
Foo.methods(false).

Foo.methods(false) == Foo.singleton_methods(false)

Why doesn’t Foo.methods(true) return the same thing as
Foo.instance_methods(true)?

I can see using a boolean parameter to tell whether you want inherited
methods to be included (as in the instance_methods method). However,
using a boolean parameter to tell whether you want instance or
singleton methods (as in the method “methods”) seems bad. Maybe that
should be deprecated in favor of instance_methods and
singleton_methods.


#2

DÅ?a Piatok 10 Február 2006 16:46 Mark V. napísal:

“methods” is a method from Object.

I can see using a boolean parameter to tell whether you want inherited
methods to be included (as in the instance_methods method). However,
using a boolean parameter to tell whether you want instance or
singleton methods (as in the method “methods”) seems bad. Maybe that
should be deprecated in favor of instance_methods and
singleton_methods.


R. Mark V.
Partner, Object Computing, Inc.

Because #instance_methods shows methods an instance of Foo will have,
and
#methods and #singleton_methods show you methods of the class object
Foo?
Just a guess there.

David V.