我很好奇是否可以遍历对象的实例变量并转储一些基本的调试信息。
我知道你可以通过执行object.instance_variables获取实例变量列表,它返回一个符号化变量数组,如[:@var1, :@var2, :@etc]
我首先想到的是如何做到这一点:
obj.instance_variables.each do
obj.instance_variable_get(var).to_yaml
end
但是我收到以下错误:“无法转储匿名类类”。什么是更好的方法?
答案 0 :(得分:5)
问题是你的实例变量中有一些匿名的proc或函数没有响应to_yaml。因为它无法转换为yaml,所以您收到此错误。尝试使用inspect,所有对象都应该响应inspect:
obj.instance_variables.each do |var|
p obj.instance_variable_get(var).inspect
end
答案 1 :(得分:0)
你必须考虑到在ruby中只是声明attr_accessor不会创建变量,你需要分配它:
class A
attr_accessor :x, :y
def initialize(z)
@x=z
end
end
def inspect_object(o)
o.instance_variables.each do |var|
var.slice!(0)
p var
p o.send(var)
end
end
a = A.new(5)
inspect_object(a)
此输出
"x"
5