我能找出一个对象是否被引用?

时间:2010-01-12 09:17:07

标签: ruby

如果我有两个对象,一个在另一个对象中被引用。然后在第一个对象中,我可以编写一个方法,它将为我提供哪些其他对象?

2 个答案:

答案 0 :(得分:2)

我不知道如何开箱即用,但也许以下帖子可能对您有所帮助:

What is a ruby object? (introducing Memprof.dump)

答案 1 :(得分:1)

也许在ObjectSpace中挖掘可能会有所帮助:

#!/usr/bin/ruby1.8

include ObjectSpace

def print_references_to_foos
  for klass in [Bar, Baz]
    each_object(klass) do |o|
      s = o.inspect
      puts s if s =~ /#<Foo/
    end
  end
end

class Foo
end

class Bar
  def initialize(foo)
    @foo = foo
  end
end

class Baz < Bar
end

foo1 = Foo.new
foo2 = Foo.new
foo3 = Foo.new
bar1 = Bar.new(foo1)
bar2 = Bar.new(foo1)
bar3 = Baz.new(foo2)

print_references_to_foos
# => #<Baz:0xb7e09158 @foo=#<Foo:0xb7e091a8>>
# => #<Bar:0xb7e0916c @foo=#<Foo:0xb7e091d0>>
# => #<Bar:0xb7e09180 @foo=#<Foo:0xb7e091d0>>
# => #<Baz:0xb7e09158 @foo=#<Foo:0xb7e091a8>>