有没有办法动态获取方法参数名称和值,可能是元编程?
[s.lstrip() + "g" for s in text.split("g") if s]
我想在我的所有方法中使用它来记录方法调用和相应的参数,但不要在每个方法中手动执行此操作。
感谢。
答案 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