Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想==为一个 ruby 类实现。我可以
==
def ==(o) o.respond_to?(:id) && self.id == o.id end
或者
def ==(o) o.is_a?(Foo) && self.id == o.id end
根据这篇文章,似乎前者更有意义。如果我正在实施eql?,那么我会做后者。这个对吗?
eql?
这取决于您是与任意对象还是特定类型之一进行比较。第二种形式是具体的,第一种是通用的。
在您的情况下,您可能对特定表格没问题。仅当您要比较的对象可以转换或解释为可以匹配的对象时,通用比较才相关。使用id似乎太开放了。这意味着当 Foo 10 和 Bar 10 可能来自完全不同的来源时,它们是等价的。
id