Ruby - get方法params名称和值

时间:2017-11-09 13:18:41

标签: ruby parameters

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

[s.lstrip() + "g" for s in text.split("g") if s]

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

感谢。

1 个答案:

答案 0 :(得分:4)

烨!在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方法,则需要将绑定传递给该方法,或使用像binding_of_caller

这样聪明的东西