[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Introspection of method parameters

Keith Sader

3/22/2006 9:15:00 PM

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,
--
Keith Sader
ksader@gmail.com
http://www.saderfamily.org/roller/p...


6 Answers

dishmael

3/22/2006 9:20:00 PM

0

Try this ...

http://www.rubycentral.com/book/o...

-Dave

-----Original Message-----
From: Keith Sader [mailto:ksader@gmail.com]
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,
--
Keith Sader
ksader@gmail.com
http://www.saderfamily.org/roller/p...



Keith Sader

3/22/2006 9:32:00 PM

0

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.

On 3/22/06, David Ishmael <dishmael@windwardcg.com> wrote:
> Try this ...
>
> http://www.rubycentral.com/book/o...
>
> -Dave
>

>
> 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,
--
Keith Sader
ksader@gmail.com
http://www.saderfamily.org/roller/p...


Mark Volkmann

3/22/2006 9:53:00 PM

0

On 3/22/06, Keith Sader <ksader@gmail.com> wrote:
> 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 argument!

> On 3/22/06, David Ishmael <dishmael@windwardcg.com> wrote:
> > Try this ...
> >
> > http://www.rubycentral.com/book/o...
> >
> > -Dave
> >
>
> >
> > 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,
> --
> Keith Sader
> ksader@gmail.com
> http://www.saderfamily.org/roller/p...
>
>


--
R. Mark Volkmann
Object Computing, Inc.


Mauricio Fernández

3/22/2006 9:54:00 PM

0

On Thu, Mar 23, 2006 at 06:31:43AM +0900, Keith Sader wrote:
> 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]

--
Mauricio Fernandez - http://eige... - singular Ruby


dishmael

3/22/2006 9:54:00 PM

0

Try this ...

class Test
def initialize
end

def one( a )
end

def two( a, b )
end
end

t = Test.new
m1 = t.method( :one )
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:ksader@gmail.com]
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.

On 3/22/06, David Ishmael <dishmael@windwardcg.com> wrote:
> Try this ...
>
> http://www.rubycentral.com/book/o...
>
> -Dave
>

>
> 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,
--
Keith Sader
ksader@gmail.com
http://www.saderfamily.org/roller/p...



Ross Bamford

3/22/2006 10:42:00 PM

0

On Thu, 2006-03-23 at 06:15 +0900, Keith Sader wrote:
> 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-...

--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk