ruby:检查两个变量是否是同一个实例

时间:2015-07-22 18:47:44

标签: ruby object comparison

我有一个班级Issue,其中每个班级都有一个key字段。因为key 意味着是唯一的,所以我覆盖了比较运算符,以便根据Issue比较两个key对象,如下所示:

def ==(other_issue)
  other_issue.key == @key
end

但是,我正在处理一个案例,其中两个可能有两个变量引用Issue的同一个实例,因此按键进行比较不会区分它们。有什么方法可以检查两个变量是否指向同一个地方?

2 个答案:

答案 0 :(得分:8)

根据the sourceequal?方法应该做你想做的事。

答案 1 :(得分:-1)

不,不是真的。这就是Good Thing™。

面向对象的基本原则是一个对象可以模拟另一个对象。如果你能分辨出两个对象是否是同一个对象("参考等式"),那么你可以将模拟与真实事物区分开来,从而打破面向对象......对于面向对象而言像Ruby这样的语言并不是那么好。

Object#equal?的默认实现确实检查了引用相等性,但是,就像Ruby中的每个其他方法一样,它可以在子类中重写或者猴子修补,所以没有办法保证它实际上会检查引用相等性。这应该是这样的。