自己統合失調症に苦しむコードを見ています。1 つのオブジェクトが別のオブジェクトをラップしていますが、これはプログラマーには隠され、コードはラッパーとラップされたオブジェクトの ID が同じであると想定します。これは object_id にのみ関連し、比較を含むメソッド呼び出しには関連しません。ラッパーがラップされたものと同じ object_id を与える場合、VM に問題があることはわかっていますが、正しく動作するために object_id に依存するカーネル、クラス、モジュール メソッド (または他の一般的に使用されるメソッド) はありますか?
例では
次のようなコードがあるかもしれません
class HashSet
def add(x)
if @objects.has_key? x.object_id
false
else
@objects[x.object_id] = x
end
end
end
add の呼び出しが false を返すと予想すると、同じオブジェクトを実際に 2 回追加できることに驚かれることでしょう (ラッパーについては知りません)。
質問を言い換えると、正しく動作するために object_id に依存するカーネル、クラス、モジュール メソッド (またはその他の一般的に使用されるメソッド) はありますか?