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

ruby: check if two variables are the same instance

我有一个 class Issue,其中每个 class 都有一个 key 字段。因为 key 意味着 是唯一的,所以我覆盖了比较运算符,这样两个 Issue 对象基于 key 进行比较,如下所示:

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

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

根据 the sourceObject#equal? 方法应该可以完成您想要做的事情:

// From object.c
rb_obj_equal(VALUE obj1, VALUE obj2)
{
    if (obj1 == obj2) return Qtrue;
    return Qfalse;
}

所以您要编写的 ruby 代码是:

obj1.equal?(obj2)

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

面向对象的一个​​基本原则是一个对象可以模拟另一个对象。如果你能分辨出两个对象是否是同一个对象("Reference Equality"),那么你就可以将模拟与真实事物区分开来,从而打破面向对象......对于像[=这样的面向对象语言20=]不太好。

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