Каков гарантированный способ сравнения двух объектов по их идентичности в Ruby? Учитывая две переменные, я хочу вернуть true, если переменные указывают на один и тот же объект в памяти.
Для большинства объектов Ruby метод equal?
сравнивается по тождеству:
f = g = Object.new
p f.equal? g # => true
Однако это работает не для всех объектов. Например:
class F
def ==(obj) false end
def ===(obj) false end
def eql?(obj) false end
def equal?(obj) false end
def object_id; self end
end
f = g = F.new
p f == g # => false
p f === g # => false
p f.eql? g # => false
p f.equal? g # => false
p f.object_id == g.object_id # => false
Что такое надежный / гарантированный способ сравнения двух объектов по идентичности, которые невозможно победить?
Это чисто интеллектуальный вопрос. Ответ на любой вопрос, который начинается с «почему», вероятно, будет «Потому что мне любопытно».