[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

getting method names for a Class

Mark Volkmann

2/10/2006 3:46:00 PM

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.

--
R. Mark Volkmann
Partner, Object Computing, Inc.


1 Answer

David Vallner

2/10/2006 6:24:00 PM

0

Dna Piatok 10 Február 2006 16:46 Mark Volkmann napísal:
> 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.
>
> --
> R. Mark Volkmann
> 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 Vallner