我正在制作一个小调试工具,以便将参数传递给方法,如下所示:
Class bar
def foo(a,b,c)
Debug.get_arguments()
### do stuff
end
end
module Debug
def get_arguments
method(__method__).parameters.map { |arg| [arg[1],eval(arg[1].to_s)] }.to_h
end
end
目前,它返回并清空哈希' {}'虽然我希望它返回{a:x,b:y,c:z}(foo的参数和值)。
是否有类似__calling_method__或__parent_method__的内容?否则,我必须将调试代码放在每个方法中。
答案 0 :(得分:0)
您可以使用eval
来评估当前范围内的代码字符串。
请注意,我修复的代码存在一些错误:
Class bar
中,大写错误Debug.get_arguments
,因此get_arguments
应该是一种类方法请注意,我只是为了更清楚地显示输出而加载awesome_print;代码不依赖于它。
脚本(test.rb):
require 'awesome_print'
class Bar
def foo(a,b,c)
eval Debug.get_arguments
end
end
module Debug
def self.get_arguments
"method(__method__).parameters.map { |arg| [arg[1],eval(arg[1].to_s)] }.to_h"
end
end
ap Bar.new.foo 1,2,3
调用脚本:
$ ruby test.rb
打印:
{
:a => 1,
:b => 2,
:c => 3
}
这表明eval
即使在嵌套时也能正常工作,这很酷。