Introspection of method parameters

K

Keith Sader

I'm trying to find out the number and name of a method's parameters.=20
I've googled for 'ruby method parameter introspection' and come up
with almost nothing. Is there a way to ask a method for the
parameters it takes?

Could this way also show me the method overloads?
foo()
foo(param1)
foo(param1, param2)
etc.

thanks,
 
D

David Ishmael

Try this ...

http://www.rubycentral.com/book/ospace.html

-Dave

-----Original Message-----
From: Keith Sader [mailto:[email protected]]
Sent: Wednesday, March 22, 2006 4:15 PM
To: ruby-talk ML
Subject: Introspection of method parameters

I'm trying to find out the number and name of a method's parameters.
I've googled for 'ruby method parameter introspection' and come up
with almost nothing. Is there a way to ask a method for the
parameters it takes?

Could this way also show me the method overloads?
foo()
foo(param1)
foo(param1, param2)
etc.

thanks,
 
K

Keith Sader

Ok, I tried that and it gets me to where I am now, I can see the
methods for an object, but I can't tell if the method

a.) takes a parameter
b.) if it takes a parameter the # of parameters it takes.

I'm trying to find out the number and name of a method's parameters.
I've googled for 'ruby method parameter introspection' and come up
with almost nothing. Is there a way to ask a method for the
parameters it takes?

Could this way also show me the method overloads?
foo()
foo(param1)
foo(param1, param2)
etc.

thanks,
 
M

Mark Volkmann

Ok, I tried that and it gets me to where I am now, I can see the
methods for an object, but I can't tell if the method

a.) takes a parameter
b.) if it takes a parameter the # of parameters it takes.

Both can be answered using the arity method in the class Method.

For example, how many parameters does the Math class method sin take?
puts Math.method:)sin).arity
outputs 1

How may parameters does the String instance method slice take?
String.new.method:)slice).arity
outputs -1
This is because slice takes a variable number of arguments.
In this case the return value is -n-1 where n is the number of
required arguments.
So the number of required arguments is zero.
But I don't think that's true. It looks to me like slice requires 1 argumen=
t!
 
M

Mauricio Fernandez

Ok, I tried that and it gets me to where I am now, I can see the
methods for an object, but I can't tell if the method

a.) takes a parameter
b.) if it takes a parameter the # of parameters it takes.

RUBY_VERSION # => "1.8.4"
class Foo
def foo(a); end
def bar(a,b); end
def baz(a,*b); end # negative arity
def nop; end
end

%w[foo bar baz nop].each{|x| p [x, Foo.instance_method(x).arity]}
# >> ["foo", 1]
# >> ["bar", 2]
# >> ["baz", -2]
# >> ["nop", 0]
 
D

David Ishmael

Try this ...

class Test
def initialize
end

def one( a )
end

def two( a, b )
end
end

t = Test.new
m1 = t.method( :eek:ne )
m2 = t.method( :two )

puts "Method one has " + m1.arity.to_s + " parameters"
puts "Method one has " + m2.arity.to_s + " parameters"

=> Method one has 1 parameters
=> Method two has 2 parameters

-Dave

-----Original Message-----
From: Keith Sader [mailto:[email protected]]
Sent: Wednesday, March 22, 2006 4:32 PM
To: ruby-talk ML
Subject: Re: Introspection of method parameters

Ok, I tried that and it gets me to where I am now, I can see the
methods for an object, but I can't tell if the method

a.) takes a parameter
b.) if it takes a parameter the # of parameters it takes.

I'm trying to find out the number and name of a method's parameters.
I've googled for 'ruby method parameter introspection' and come up
with almost nothing. Is there a way to ask a method for the
parameters it takes?

Could this way also show me the method overloads?
foo()
foo(param1)
foo(param1, param2)
etc.

thanks,
 
R

Ross Bamford

I'm trying to find out the number and name of a method's parameters.
I've googled for 'ruby method parameter introspection' and come up
with almost nothing. Is there a way to ask a method for the
parameters it takes?

I wrote a little thing [1] a while ago that lets you get the names of
method arguments, though with some limitations (no C methods, no
differentiation of block/splat args, etc).
Could this way also show me the method overloads?
foo()
foo(param1)
foo(param1, param2)
etc.

Ruby doesn't have method overloading.

[1]: http://roscopeco.blogspot.com/2006/02/callcc-vs-catch.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top