Что такое гарантированный способ сравнить два объекта по их идентичности в 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
Что такое надежный/гарантированный способ сравнения двух объектов по идентичности, которые нельзя победить?
Это чисто интеллектуальный вопрос. Ответ на любой вопрос, который начинается с "почему", вероятно, будет "Потому что мне любопытно".