From: Martin Boese Date: 2009-07-28T18:31:28+09:00 Subject: Re: bug in IPAddr eql? (stndard library) Hi, .eql? is implemented in Object - the parent of IPAddr. According to the docs '==' is synonymous with 'eql?' in Object. Now IPAddr has it's own implementation of '==' but doesn't touch the 'eql?' method. This should quick fix your problem: class IPAddr def eql?(other) self == other end end I would also consider it as a bug. See: ri Object.eql Martin On Tue, 2009-07-28 at 03:50 +0900, Nick Brown wrote: > The .eql? method is supposed to return true if the objects are == and of > the same class, correct? This is *not* the case with IPAddr objects. > > irb(main):001:0> require 'ipaddr' > => true > irb(main):002:0> a = IPAddr.new('1.1.1.1') > => # > irb(main):003:0> b = IPAddr.new('1.1.1.1') > => # > irb(main):004:0> a == b > => true > irb(main):005:0> a.eql? b > => false > irb(main):006:0> a == b and a.class == b.class > => true > > Clearly, the value of "a.eql? b" should be true, not false. > > This bug breaks several things. In my case, it causes Sets of IPAddr > objects to contain duplicates, angering the gods of mathematics.