是否可以获取方法的参数名称?
示例:
def method_called(arg1, arg2)
puts my_method.inspect
end
我想知道应该调用什么方法(my_method)来获得以下输出:
["arg1", "arg2"]
答案 0 :(得分:10)
在Ruby 1.9.2中,您可以通过Proc
轻松获取任何Method
(当然也包括任何UnboundMethod
或Proc#parameters
)的参数列表:
def foo(a, b=nil, *c, d, &e); end
p method(:foo).parameters
# => [[:req, :a], [:opt, :b], [:rest, :c], [:req, :d], [:block, :e]]
格式是符号对的数组:类型(必填,可选,休息,阻止)和名称。
对于您想要的格式,请尝试
method(:foo).parameters.map(&:last).map(&:to_s)
# => ['a', 'b', 'c', 'd', 'e']
答案 1 :(得分:1)
如果您使用的是Ruby 1.9.1,则可以使用MethoPara gem。这允许您执行以下操作:
def method_called(arg1, arg2)
method(caller[0][/`([^']*)'/, 1].to_sym).parameters
end
您可以使用Michael Grosser在他的blog提出的方法。
答案 2 :(得分:0)
在方法中,您可以通过在开头调用local_variables
来获取您给出参数的名称(因为当时没有定义其他局部变量)。
但是,除了 may 日志信息之外,我认为除此之外没有任何好处。如果你有一个特定的目标,我们可能会发现一些更惯用的东西。
答案 3 :(得分:0)
如果你想要默认值的值,那么就是“arguments”gem
$ gem install rdp-arguments
$ irb
>> require 'arguments'
>> require 'test.rb' # class A is defined here
>> Arguments.names(A, :go)