ruby - Ruby 中的 "=="实现是否应该检查类型?

标签 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?,那么我会选择后者。这样对吗?

最佳答案

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

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

关于ruby - Ruby 中的 "=="实现是否应该检查类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708199/

相关文章:

python - Pydantic 从 __eq__ 中排除字段以避免递归错误

python - 我如何在 python 中将整数转换为 'binary'

javascript - 在 Javascript 中确定日期相等性

scala - scala 中 null 的相等性,odersky 书的解释似乎与 scala 代码不同?

c# - LINQ 选择具有匿名类型的 Distinct

ruby-on-rails - 使用 rubocop 的 Atom Beautify Ruby 不起作用

mysql - Rails 字符串唯一 ID

mysql - 在 Rails 中屏蔽图像的真实 URL

ruby-on-rails - Amazon-ecs如何获取产品的顶级分类?

closures - 如何测试函数和闭包的相等性?