class ObjectSpace::WeakKeyMap

Ein ObjectSpace::WeakKeyMap ist eine Schlüssel-Wert-Zuordnung, die schwache Referenzen auf ihre Schlüssel speichert, sodass sie vom Garbage Collector eingesammelt werden können, wenn keine Referenzen mehr vorhanden sind.

Im Gegensatz zu ObjectSpace::WeakMap

(Beachten Sie, dass GC.start hier nur zu Demonstrationszwecken verwendet wird und möglicherweise nicht immer zu den gezeigten Ergebnissen führt.)

Die Sammlung ist besonders nützlich für die Implementierung von Caches für leichtgewichtige Wertobjekte, sodass nur eine Kopie jeder Wertdarstellung im Speicher gespeichert wird, aber die nicht verwendeten Kopien vom Garbage Collector eingesammelt würden.

CACHE = ObjectSpace::WeakKeyMap

def make_value(**)
   val = ValueObject.new(**)
   if (existing = @cache.getkey(val))
      # if the object with this value exists, we return it
      existing
   else
      # otherwise, put it in the cache
      @cache[val] = true
      val
   end
end

Dies führt dazu, dass make_value immer dasselbe Objekt für denselben Satz von Attributen zurückgibt, aber die nicht mehr benötigten Werte würden nicht für immer im Cache verbleiben.