[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

function discovery

Joshua Ball

12/17/2008 5:37:00 AM

[Note: parts of this message were removed to make it a legal post.]

I am curious if there is a programatic way to list all methods of a class.
(Yes, I know about "ri", I am just curious here)

For instance, I am trying to figure out what I could do with the File f in:
open(ARGV[0], 'rb') { |f|
puts f.stat.mtime
puts f.class
}

Now, f.class returns: File

Is there anything like:
f.functions.each { |p| puts p }

Thanks

4 Answers

Einar Magnús Boson

12/17/2008 6:04:00 AM

0

f.methods
f.methods(false) to skip the inherited ones.
usually this is helpful:

puts f.methods(false).sort

On 17.12.2008, at 05:36 , Joshua Ball wrote:

> I am curious if there is a programatic way to list all methods of a
> class.
> (Yes, I know about "ri", I am just curious here)
>
> For instance, I am trying to figure out what I could do with the
> File f in:
> open(ARGV[0], 'rb') { |f|
> puts f.stat.mtime
> puts f.class
> }
>
> Now, f.class returns: File
>
> Is there anything like:
> f.functions.each { |p| puts p }
>
> Thanks

einarmagnus




Brian Candler

12/17/2008 11:40:00 AM

0

Einar Magnús Boson wrote:
> f.methods
> f.methods(false) to skip the inherited ones.
> usually this is helpful:
>
> puts f.methods(false).sort

Also useful:

Object.constants.grep(/RUBY/)
--
Posted via http://www.ruby-....

Phlip

12/17/2008 5:24:00 PM

0

> [Note: parts of this message were removed to make it a legal post.]

I express no curiosity about the illegal parts! (-;

Joshua Ball wrote:

> I am curious if there is a programatic way to list all methods of a class.
> (Yes, I know about "ri", I am just curious here)

ri only returns what the documentor felt like telling you.

Here's my favorite wrapper on the 'public_methods' system:

def what?(anObject)
p anObject.class.name
puts (anObject.public_methods - Object.new.public_methods).sort
end

Now you just say 'what? f', and it tells you what f's all about. It also throws
away all the stuff f inherited from Object, because you should already know it!

--
Phlip

Robert Klemme

12/17/2008 5:49:00 PM

0

On 17.12.2008 18:24, Phlip wrote:
> > [Note: parts of this message were removed to make it a legal post.]
>
> I express no curiosity about the illegal parts! (-;
>
> Joshua Ball wrote:
>
>> I am curious if there is a programatic way to list all methods of a
>> class.
>> (Yes, I know about "ri", I am just curious here)
>
> ri only returns what the documentor felt like telling you.
>
> Here's my favorite wrapper on the 'public_methods' system:
>
> def what?(anObject)
> p anObject.class.name
> puts (anObject.public_methods - Object.new.public_methods).sort
> end

You do not need to construct an instance of Object - you can as well use
Object.public_instance_methods.

> Now you just say 'what? f', and it tells you what f's all about. It also
> throws away all the stuff f inherited from Object, because you should
> already know it!

Here's an alternative version, which prints methods with the defining
class. Note that this omits methods defined at the instance level.

def what? o
o.class.ancestors.each do |cl|
p cl, cl.public_instance_methods(false).sort
end
end

Kind regards

robert