This is just a simple implementation, we’ve opened the Hash class and
changed Hash#store to create a new WeakRef
object with key and obj parameters before passing
them as our key-value pair to the hash.

With this you will have to limit your self to String keys, otherwise you
will get an ArgumentError because WeakRef cannot
create a finalizer for a Symbol. Symbols are immutable and cannot be
garbage collected.

You can see the local variable omg stayed, although its
reference in our hash object was garbage collected, along with the rest of
the keys and values. Also, when we tried to inspect our hash, we got a WeakRef::RefError. This is because these
objects were also garbage collected.

Public Class Methods

new(orig)click to toggle source

Creates a weak reference to orig

Raises an ArgumentError if the given orig is immutable, such
as Symbol, Fixnum, or Float.