【问题标题】:Is there a way to return a method parameter names in ruby [duplicate]有没有办法在ruby中返回方法参数名称[重复]
【发布时间】:2010-03-16 04:14:55
【问题描述】:

可能重复:
Getting Argument Names In Ruby Reflection

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

示例:

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

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

["arg1", "arg2"]

【问题讨论】:

标签: ruby reflection parameters


【解决方案1】:

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

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']

【讨论】:

  • 好消息,这适用于 Ruby 1.9.2,我会注意这一点。但目前我使用的是 1.8.7。
【解决方案2】:

1

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

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

2

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

3

Merb Action Args

【讨论】:

    【解决方案3】:

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

    但是,除了可能记录信息之外,我认为这不会有任何好处。如果您有一个特定的目标,我们可能会找到更惯用的东西。

    【讨论】:

    • 它对登录很有用,但它对控制台使用。当我在一个 irb 会话中并且我想调用一个我不记得 tts 参数的特定方法时。我想有一种简单的方法来了解它们,而无需查看源代码或使用 ri。
    【解决方案4】:

    如果您也想要默认值的值,还有“参数”gem

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-01
      • 2017-01-27
      • 1970-01-01
      • 2010-11-22
      • 2023-01-17
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多