我有一个班级Issue
,其中每个班级都有一个key
字段。因为key
意味着是唯一的,所以我覆盖了比较运算符,以便根据Issue
比较两个key
对象,如下所示:
def ==(other_issue)
other_issue.key == @key
end
但是,我正在处理一个案例,其中两个可能有两个变量引用Issue
的同一个实例,因此按键进行比较不会区分它们。有什么方法可以检查两个变量是否指向同一个地方?
答案 0 :(得分:8)
根据the source,equal?
方法应该做你想做的事。
答案 1 :(得分:-1)
不,不是真的。这就是Good Thing™。
面向对象的基本原则是一个对象可以模拟另一个对象。如果你能分辨出两个对象是否是同一个对象("参考等式"),那么你可以将模拟与真实事物区分开来,从而打破面向对象......对于面向对象而言像Ruby这样的语言并不是那么好。
Object#equal?
的默认实现确实检查了引用相等性,但是,就像Ruby中的每个其他方法一样,它可以在子类中重写或者猴子修补,所以没有办法保证它实际上会检查引用相等性。这应该是这样的。