ruby调试,试图遍历对象实例变量

re5*_*5et 2 ruby

我很好奇是否可以遍历对象的实例变量并转储一些基本的调试信息.

我知道你可以通过做object.instance_variables得到一个实例变量列表,它返回一个符号化变量数组,比如[:@var1, :@var2, :@etc]我首先猜测如何做到这一点:

obj.instance_variables.each do
  obj.instance_variable_get(var).to_yaml
end
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:"无法转储匿名类类".什么是更好的方法?

Pan*_*kos 5

问题是你的实例变量中有一些匿名的proc或函数,它们不响应to_yaml.因为它无法转换为yaml,所以您收到此错误.尝试使用inspect,所有对象都应该响应inspect:

obj.instance_variables.each do |var|
  p obj.instance_variable_get(var).inspect
end
Run Code Online (Sandbox Code Playgroud)