Getting method parameters in specified order

C

Chintana Wilamuna

Hi,

If I declare a function that expects 3 arguments,

def bar(x, y, z)
...
end

and later, if I have the function name in a string, is there a way to
get the parameter names using reflection in Ruby? Something similar
to the following PHP snippet,

$a = new ReflectionFunction("function_name");
$a->getParameters();

Thanks in advance,

Bye,

-Chintana
 
B

Bernardo Monteiro Rufino

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

I think we cant do more than this:

irb(main):001:0> def test(a, b, c)
irb(main):002:1> end
=> nil
irb(main):003:0> method:)test).arity
=> 3
 
C

Chintana Wilamuna

I think we cant do more than this:

irb(main):001:0> def test(a, b, c)
irb(main):002:1> end
=> nil
irb(main):003:0> method:)test).arity
=> 3

Thanks Bernardo.

Bye,

-Chintana
 
P

Phrogz

Hi,

If I declare a function that expects 3 arguments,

def bar(x, y, z)
...
end

and later, if I have the function name in a string, is there a way to
get the parameter names using reflection in Ruby?

There is not; as Bernardo said, Ruby only allows you to check the
arity of the method.

I had a need for this, too. (I was working on a project that allowed
developers to provide arbitrary Ruby-based plugins, and the GUI of the
application needed to expose the methods and their paramters
visually.)

For that need, I wrote this:
http://phrogz.net/RubyLibs/rdoc/classes/DescribeMethods.html
 
P

Peña, Botp

From: Chintana Wilamuna [mailto:[email protected]]=20
# Sent: Thursday, December 13, 2007 11:40 PM
# To: ruby-talk ML
# Subject: Re: Getting method parameters in specified order
#=20
# On Dec 13, 2007 6:36 PM, Bernardo Monteiro Rufino=20
#=20
# > I think we cant do more than this:
# >
# > irb(main):001:0> def test(a, b, c)
# > irb(main):002:1> end
# > =3D> nil
# > irb(main):003:0> method:)test).arity
# > =3D> 3

not part of ruby itself, but try looking at ruby2ruby

kind regards -botp
 
L

Lloyd Linklater

Chintana said:
Hi,

If I declare a function that expects 3 arguments,

def bar(x, y, z)
...
end

and later, if I have the function name in a string, is there a way to
get the parameter names using reflection in Ruby? Something similar
to the following PHP snippet,

$a = new ReflectionFunction("function_name");
$a->getParameters();

Forgive the naive thoughts of a ruby ruby, but what if you accepted an
array as the parameter? You could use any number of elements and you
would always know which is which.
 
E

Ezra Zygmuntowicz

Hi~

Forgive the naive thoughts of a ruby ruby, but what if you accepted an
array as the parameter? You could use any number of elements and you
would always know which is which.



You can accomplish this with the Ruby2Ruby gem. Here is a pastie of
some code that can do this for you:

http://pastie.caboo.se/128959

Here is how you can use it:

~/_merb/merb > irb -r get_args.rb
class Foo
def hi(a,b,c)
p a,b,c
end
end => nil
Foo.instance_method:)hi).get_args => [[:a], [:b], [:c]]

Cheers-

- Ezra Zygmuntowicz
-- Founder & Software Architect
-- (e-mail address removed)
-- EngineYard.com
 

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,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top