我想实现==一个ruby类.我可以
def ==(o)
o.respond_to?(:id) && self.id == o.id
end
Run Code Online (Sandbox Code Playgroud)
要么
def ==(o)
o.is_a?(Foo) && self.id == o.id
end
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,前者似乎更有意义.如果我正在实施eql?那么我会做后者.它是否正确?
这取决于您是与任意对象还是特定类型的对象进行比较。第二种形式是特定的,第一种形式是通用的。
就您而言,您可能对特定形式感到满意。仅当您要比较的对象可以转换或解释为可以匹配的对象时,通用比较才有意义。使用id似乎太开放了。这意味着当 Foo 10 和 Bar 10 可能来自完全不同的来源时,它们是等效的。