Class: WeakRef
- Inherits:
-
Delegator
- Object
- Delegator
- WeakRef
- Defined in:
- lib/weakref.rb
Overview
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 # create a new object instance
p foo.to_s # original's class
foo = WeakRef.new(foo) # reassign foo with WeakRef instance
p foo.to_s # should be same class
GC.start # start the garbage collector
p foo.to_s # should raise exception (recycled)
Defined Under Namespace
Classes: RefError
Constant Summary collapse
- VERSION =
"0.1.1"
- @@__map =
::ObjectSpace::WeakMap.new
Instance Method Summary collapse
-
#__getobj__ ⇒ Object
:nodoc:.
-
#__setobj__(obj) ⇒ Object
:nodoc:.
-
#initialize(orig) ⇒ WeakRef
constructor
Creates a weak reference to
orig
. -
#weakref_alive? ⇒ Boolean
Returns true if the referenced object is still alive.
Constructor Details
#initialize(orig) ⇒ WeakRef
Creates a weak reference to orig
Raises an ArgumentError if the given orig
is immutable, such as Symbol, Integer, or Float.
37 38 39 40 41 42 43 44 45 |
# File 'lib/weakref.rb', line 37 def initialize(orig) case orig when true, false, nil @delegate_sd_obj = orig else @@__map[self] = orig end super end |
Instance Method Details
#__getobj__ ⇒ Object
:nodoc:
47 48 49 50 |
# File 'lib/weakref.rb', line 47 def __getobj__ # :nodoc: @@__map[self] or defined?(@delegate_sd_obj) ? @delegate_sd_obj : Kernel::raise(RefError, "Invalid Reference - probably recycled", Kernel::caller(2)) end |
#__setobj__(obj) ⇒ Object
:nodoc:
52 53 |
# File 'lib/weakref.rb', line 52 def __setobj__(obj) # :nodoc: end |
#weakref_alive? ⇒ Boolean
Returns true if the referenced object is still alive.
58 59 60 |
# File 'lib/weakref.rb', line 58 def weakref_alive? @@__map.key?(self) or defined?(@delegate_sd_obj) end |