我正在看一段患有自我精神分裂症的代码。一个对象正在包装另一个对象,对程序员来说这是隐藏的,代码将期望包装器和被包装器的身份相同。这仅与 object_id 相关,与包括比较在内的任何方法调用无关。我知道如果包装器会给出与被包装器相同的 object_id,但是否有任何依赖 object_id 正常运行的内核、类、模块方法(或其他常用方法),VM 会出现问题?
在示例中
我可能有类似的代码
class HashSet
def add(x)
if @objects.has_key? x.object_id
false
else
@objects[x.object_id] = x
end
end
end
如果我希望 add 调用返回 false 我会惊讶地发现我实际上可以添加两次相同的对象(我不知道包装器)。
重申这个问题:是否有任何依赖 object_id 来正确运行的内核、类、模块方法(或其他常用方法)?