新手问题 Ruby 递归遍历实例遍历,有更好的办法么?

shiren1118 · January 28, 2013 · Last by doitian replied at January 28, 2013 · 4935 hits

ruby 递归遍历实例遍历,有更好的办法么?

下面是我的土办法

@s=0
def recursion_dump_instance_variables(item)
  @s += 1;
  item.instance_variables.each do |v|
    p "#{@s}---"
    p  item.instance_variable_get(v)
    p "---"
    recursion_dump_instance_variables v
  end
end

各位有什么好办法?

方法 2

k= item.class
    ObjectSpace.each_object(k) {|x| 
      x.instance_variables.each do |y|
        p x.instance_variable_get(y)
      end
    }

ruby 递归遍历实例变量?

#1 楼 @keating 最近看一个库,里面把文本里内容解析到实例变量里,而且每个示例变量还是单独的 class。。。。。元编程是好用,不好读啊

@shiren1118 用方法二打印了一个 ActiveRecord 子类,立马崩溃了 😢

#3 楼 @keating 那是 ruby programming 2nd 里的啊

随便写的一个迭代实现未验证

q = [item]
while q != []
  item = q.shift
  yield item
  if item.try :instance_variables
    q += item.instance_variables
  end
end

引用成了个圈就爆了,要记录下已经打印过的 object_id

You need to Sign in before reply, if you don't have an account, please Sign up first.