【问题标题】:Ruby - get method params names and values [duplicate]Ruby - 获取方法参数名称和值
【发布时间】:2017-11-09 13:18:40
【问题描述】:

有没有办法动态获取方法参数名称和值,也许是元编程?

def my_method(name, age)
  # some code that solves this issue
end

my_method('John', 22) # => { name: 'John', age: 22 }

我想在我的所有方法中使用它来记录方法调用和相应的参数,但不想在每个方法中手动执行此操作。

谢谢。

【问题讨论】:

    标签: ruby parameters


    【解决方案1】:

    是的!在 ruby​​ 中,它被称为binding,它是一个封装了特定行运行的上下文的对象。完整的文档是 here,但如果你正在尝试做...

    def my_method(arg1, arg2)
      var = arg2
      p binding.local_variables #=> [:arg1, :arg2, :var]
      p binding.local_variable_get(:arg1) #=> 1
      p Hash[binding.local_variables.map{|x| [x, binding.local_variable_get(x)]}] #=> {:arg1 => 1, :arg2 => 2, :var => 2}
    end
    
    my_method(1, 2)
    

    如果您可以提供帮助,我强烈建议您不要使用 Binding#eval。几乎总有比使用eval 更好的方法来解决问题。请注意,binding 在调用它的行上封装了上下文,因此,如果您希望有一个简单的 log_parameters_at_this_point 方法,则需要将绑定传递给该方法,或者使用更聪明的方法,例如 @ 987654322@

    【讨论】:

    • 完美@ymbirtt,非常感谢
    猜你喜欢
    • 2015-10-01
    • 2011-04-22
    • 2011-10-09
    • 2016-10-21
    • 1970-01-01
    • 2010-09-18
    • 2018-05-16
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多