In Files

  • weakref.rb

Parent

Namespace

Class/Module Index [+]

Quicksearch

WeakRef

Weak Reference class that allows a referenced object to be garbage-collected. A WeakRef may be used exactly like the object it references.

Usage:

foo = Object.new
foo = Object.new
p foo.to_s                  # original's class
foo = WeakRef.new(foo)
p foo.to_s                  # should be same class
ObjectSpace.garbage_collect
p foo.to_s                  # should raise exception (recycled)

Public Class Methods

new(orig) click to toggle source

Creates a weak reference to orig

 
               # File weakref.rb, line 51
def initialize(orig)
  @__id = orig.object_id
  ObjectSpace.define_finalizer orig, @@final
  ObjectSpace.define_finalizer self, @@final
  @@mutex.synchronize {
    @@id_map[@__id] = [] unless @@id_map[@__id]
  }
  @@id_map[@__id].push self.object_id
  @@id_rev_map[self.object_id] = @__id
  super
end
            

Public Instance Methods

weakref_alive?() click to toggle source

Returns true if the referenced object is still alive.

 
               # File weakref.rb, line 80
def weakref_alive?
  @@id_rev_map[self.object_id] == @__id
end