I am wondering if there is a way to programatically get the name of the
arguments a function take.
Say, I have this code:
class MyClass
def my_fct(a, b, c)
end
end
Now, I can easily get a handle to the method 'my_fct' using:
mc = MyClass.new
meth = mc.method(:my_fct)
But how do I get to the list of arguments of 'my_fct' ? I couldn't find
anything like:
meth.arg_list
which would return [ :a, :b, :c ], or something like that.
Is this even possible in ruby ?
-Didier
···
--
Posted via http://www.ruby-forum.com/.
Didier Prophete wrote:
I am wondering if there is a way to programatically get the name of the
arguments a function take.
Say, I have this code:
class MyClass
def my_fct(a, b, c)
end
end
Now, I can easily get a handle to the method 'my_fct' using:
mc = MyClass.new
meth = mc.method(:my_fct)
But how do I get to the list of arguments of 'my_fct' ? I couldn't find
anything like:
meth.arg_list
which would return [ :a, :b, :c ], or something like that.
Is this even possible in ruby ?
-Didier
i also would like to do this. anybody know if it's possible, and also
getting arg names from a proc? if so it would be very handy for
metaprogramming.
thanks
···
--
Posted via http://www.ruby-forum.com/\.
Guest wrote:
Didier Prophete wrote:
I am wondering if there is a way to programatically get the name of the
arguments a function take.
Say, I have this code:
class MyClass
def my_fct(a, b, c)
end
end
Now, I can easily get a handle to the method 'my_fct' using:
mc = MyClass.new
meth = mc.method(:my_fct)
But how do I get to the list of arguments of 'my_fct' ? I couldn't find
anything like:
meth.arg_list
which would return [ :a, :b, :c ], or something like that.
Is this even possible in ruby ?
-Didier
i also would like to do this. anybody know if it's possible, and also
getting arg names from a proc? if so it would be very handy for
metaprogramming.
The short answer: no, it's not possible. What do you want it for?
There's always this way, though:
def method_arg_names(method_name, file)
File.read(file)[/def #{Regexp.escape method_name}(.*(\)|$))/, 1]
end
p method_arg_names("method_arg_names", $0) #=> "(method_name, file)"
Cheers,
Dave
Also, this, if you're only dealing with Ruby methods and are in a
kamikaze kind of mood:
class Method
def arg_names
catch(:traced) do
dummy_args = [nil]
dummy_args *= self.arity unless self.arity < 0
set_trace_func lambda { |event, file, line, id, bdng, cls|
if event == 'call'
set_trace_func nil
throw(:traced, eval('local_variables',bdng).map { |lv| lv.intern })
end
}
self.call(*dummy_args)
# if we get here, call is bust
set_trace_func nil
raise "No ruby method call in block"
end
end
end
Doesn't work for procs, though.
···
On Tue, 2006-05-02 at 09:17 +0900, Dave Burt wrote:
Guest wrote:
> Didier Prophete wrote:
>> I am wondering if there is a way to programatically get the name of the
>> arguments a function take.
>>
>> [...snip...]
>>
>> Is this even possible in ruby ?
>
> i also would like to do this. anybody know if it's possible, and also
> getting arg names from a proc? if so it would be very handy for
> metaprogramming.
The short answer: no, it's not possible. What do you want it for?
There's always this way, though:
def method_arg_names(method_name, file)
File.read(file)[/def #{Regexp.escape method_name}(.*(\)|$))/, 1]
end
p method_arg_names("method_arg_names", $0) #=> "(method_name, file)"
Cheers,
Dave
--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk