ruby-on-rails - 有没有办法在 Ruby 中访问方法参数?

标签 ruby-on-rails ruby

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/

相关文章:

ruby-on-rails - rails : How can I prevent the deletion of the last related item?

ruby-on-rails - 带有分类器 gem 的无效编码符号

ruby - 使用 systemu 而不是 open3 的好处?

ruby-on-rails - 在编辑时以表单形式显示 hstore 保存的值以供输入

ruby-on-rails - Apache 和 Phusion Passenger 在失败的 Rails 应用程序上的模糊错误 - 如何解决这样一个非详细问题?

ruby-on-rails - Rails 5 在 check_box_tag 标签中呈现额外的空间

mysql - 如何在选择查询rails或sql查询中使用trim

ruby-on-rails - 什么时候 block 比函数更有用(ruby)?

ruby-on-rails - Rails 如何推断嵌套资源的父级?

ruby-on-rails - Rails : most Quiz attributes passing to params, 除了 user_id 之外。为什么?