Ruby 和 ROR 的新手并且每天都喜欢它,所以这是我的问题,因为我不知道如何用谷歌搜索它(我已经尝试过:))
我们有方法
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,所以我认为有办法 :) 如果是 Java,我会列出它们 :)
输出将是:
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 eval
中不能再用符号调用。为了解决这个问题,在构建参数名称列表时添加了一个明确的 to_s
,即 parameters.map { |arg| arg[1].to_s
关于ruby-on-rails - 有没有办法在 Ruby 中访问方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211813/