Weakref 有不同的object_id?

Weakref has a different object_id?

为什么对象的 weakref 与对象本身具有不同的 object_id?

主要

obj = {}
weakobj = WeakRef.new(obj)
puts weakobj.object_id
puts obj.object_id

输出

22206940
22207020

为什么这两个数字不同?

objweakobj 都是对象。它们不是同一个对象。并且两个不同的对象不能共享一个 ID

因为它们是不同的对象。 从控制台检查 objweakobj 的 class,例如 obj.classweakobj.class。你会看到不同。