Function discovery


#1

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


#2

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/)


#3

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

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

Joshua B. 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!


#4

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 B. wrote:

Now, f.class returns: File

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

Thanks

einarmagnus


#5

On 17.12.2008 18:24, Phlip wrote:

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