Ruby中的“==”实现应该检查类型吗?

时间:2012-05-22 18:50:37

标签: ruby equality

我想为ruby类实现==。我能做到

def ==(o)
  o.respond_to?(:id) && self.id == o.id
end

def ==(o)
  o.is_a?(Foo) && self.id == o.id
end

根据this文章,似乎前者更有意义。如果我正在实施eql?那么我会做后者。它是否正确?

1 个答案:

答案 0 :(得分:1)

这取决于您是否与任意对象或特定类型的对象进行比较。第二种形式是特定的,第一种是通用的。

在你的情况下,你可能对特定表格很好。只有当您比较的对象可以转换或解释为可以匹配的对象时,通用比较才有意义。使用id似乎太开放了。这意味着当Foo 10和Bar 10可能来自完全不同的来源时,它们是等效的。