有没有办法在ruby 中返回方法参数名称

可能重复:
在Rubyreflection中获取参数名称

是否可以获取方法的参数名称?

示例:

def method_called(arg1, arg2) puts my_method.inspect end 

我想知道应该调用什么方法(my_method)来获得以下输出:

 ["arg1", "arg2"] 

在Ruby 1.9.2中,您可以使用Proc#parameters UnboundMethod获取任何Proc的参数列表(当然也包括任何MethodUnboundMethod ):

 def foo(a, b=nil, *c, d, &e); end p method(:foo).parameters # => [[:req, :a], [:opt, :b], [:rest, :c], [:req, :d], [:block, :e]] 

格式是符号对的数组:类型(必需,可选,rest,块)和名称。

对于您想要的格式,请尝试

 method(:foo).parameters.map(&:last).map(&:to_s) # => ['a', 'b', 'c', 'd', 'e'] 

1

如果您使用的是Ruby 1.9.1,则可以使用MethoPara gem。 这允许您执行以下操作:

 def method_called(arg1, arg2) method(caller[0][/`([^']*)'/, 1].to_sym).parameters end 

2

您可以使用Michael Grosser在其博客中提出的方法。

3

Merb Action Args

在方法中,您可以通过在开头调用local_variables来获取您给出参数的名称(因为当时没有定义其他局部变量)。

但是,除了记录信息之外,我认为除此之外没有任何好处。 如果你有一个特定的目标,我们可能会发现一些更惯用的东西。

如果你想要默认值的值,那么就是“arguments”gem

 $ gem install rdp-arguments $ irb >> require 'arguments' >> require 'test.rb' # class A is defined here >> Arguments.names(A, :go)