在Ruby中,有没有一种可靠的方法来比较两个对象的标识(identity)?给定两个变量,如果这两个变量指向内存中完全相同的对象,则返回true。
对于大多数Ruby对象,equal?
方法可以用来比较标识(identity):
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
有没有一种绝对可靠的方式,可以比较两个无法被伪造的对象?
这只是一个纯粹的思想问题。任何以“为什么”开头的问题的答案可能是“因为我好奇”。
object_id
不是整数这个事实来判断出有些不对劲。 - Andrew Grimmdef object_id; rand(10000) end
. 当面对像F
这样的病态情况时,你如何依赖于“查看对象是否等于自身”?真正的根本问题是我们不知道如何让 Ruby 判断两个对象是否相等,我们只能询问 这些对象 是否相等;如果我们不能信任对象的行为,那我们该怎么做呢? - mu is too short