class ObjectSpace::WeakMap

ObjectSpace::WeakMap 是一个键值映射,它持有对其键和值的弱引用,因此当没有其他引用时,它们可以被垃圾回收。

映射中的键按身份进行比较。

m = ObjectSpace::WeakMap.new
key1 = "foo"
val1 = Object.new
m[key1] = val1

key2 = "bar"
val2 = Object.new
m[key2] = val2

m[key1] #=> #<Object:0x0...>
m[key2] #=> #<Object:0x0...>

val1 = nil # remove the other reference to value
GC.start

m[key1] #=> nil
m.keys #=> ["bar"]

key2 = nil # remove the other reference to key
GC.start

m[key2] #=> nil
m.keys #=> []

(请注意,GC.start 在这里仅用于演示目的,可能并不总是导致演示的结果。)

另请参阅 ObjectSpace::WeakKeyMap 映射类,它按值比较键,并且仅持有对键的弱引用。