Does anyone know how to use reflection to get the name of a parameter of
a method ?
It is useful for documenting a class and doing editor with code
completion
Le Huy wrote:
Does anyone know how to use reflection to get the name of a parameter of
a method ?
def meth(argy)
p local_variables
end
It is useful for documenting a class and doing editor with code
completion
Le Huy wrote:
Does anyone know how to use reflection to get the name of a parameter of
a method ?
It is useful for documenting a class and doing editor with code
completion
Unfortunately that is currently impossible.
I hope and expect this will be available in the future, but I
don’t think it will be soon.
Hal
def meth(argy)
p local_variables
end
The problem with this solution is that it does not get the name of the
variable that it was called with, just what it’s assigned to (and not
entirely useful, though definitely not useless). I think Le is asking
about
how to get the name of the variable where the value is being copied to
argy
from.
M.T.
On Sep 7, 2006, at 3:53 PM, Matt T. wrote:
how to get the name of the variable where the value is being copied
to argy
from.M.T.
I don’t think so, the OP said:
On Sep 7, 2006, at 2:35 AM, Le Huy wrote:
It is useful for documenting a class and doing editor with code
completion–
Posted via http://www.ruby-forum.com/.
which leaves me to believe he’s interested in the parameter names for
the method definition. (It would be silly (well maybe just extreme)
to document every callsite).
which leaves me to believe he’s interested in the parameter names for
the method definition. (It would be silly (well maybe just extreme)
to document every callsite).
You may be right. Well, if so, then your solution works like a charm. If
not, then there’s no solution.
M.T.
This is an ugly hack, and isn’t very pretty in usage, plus it’s got
lots of holes I’m sure, but:
module ParameterInspector
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def find_method_declaration(m)
cat[/def\s+#{m}($|\(.*)/]
end
def find_parameter(method_name, arity)
find_method_declaration(method_name)[/\(.*\)/][1...-1].split(',')[arity]
end
def cat
File.read(self.file)
end
end
end
Then to use it, you must write a class that defines a ::file method,
and include it.
class Example
include ParameterInspector
def self.file
__FILE__
end
def say(something)
puts something
end
end
puts Example.find_parameter :say, 0
“something”
On Sep 7, 2006, at 6:30 PM, Matt T. wrote:
You may be right. Well, if so, then your solution works like a
charm. If
not, then there’s no solution.
My solution? I had no solutions, just random commentary. (And
there is of course the set_trace_func based solution combined with
reading the source file)