Function discovery

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

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

[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

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-forum.com/\.

> [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

···

On 17.12.2008 18:24, Phlip wrote: