有没有一种方法可以访问Ruby中的方法参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我是Ruby和ROR的新手。这里是我的问题:

有method:

def foo(first_name, last_name, age, sex, is_plumber)
    # some code
    # error happens here
    logger.error "Method has failed, here are all method arguments #{SOMETHING}"    
end

我正在寻找方法来获取传递给方法的所有参数,而不列出每个参数。因为这是ruby,我认为有一种方法。

输出:

Method has failed, here are all method arguments {"Mario", "Super", 40, true, true}
提问于
用户回答回答于

在Ruby 1.9.2及更高版本中,可以在parameters方法上使用该方法来获取该方法的参数列表。将返回一个表明参数名称和是否需要的对列表。

def foo(x, y)
end

然后

method(:foo).parameters # => [[:req, :x], [:req, :y]]

可以使用特殊变量__method__来获取当前方法的名称。因此,在一个方法中,其参数的名称可以通过

args = method(__method__).parameters.map { |arg| arg[1].to_s }

然后可以显示每个参数的名称和值

logger.error "Method failed with " + args.map { |arg| "#{arg} = #{eval arg}" }.join(', ')

用户回答回答于

从Ruby 2.1开始,可以使用binding.local_variable_get读取任何局部变量的值,包括方法参数(参数),以避免EVAL。

def foo(x, y)
  method(__method__).parameters.map do |_, name|
    binding.local_variable_get(name)
  end
end

foo(1, 2)  # => 1, 2

扫码关注云+社区