Making Array#uniq work

Hi,

you have to define a 'hash' method because Array uses a Hash to remove
the duplicates.

e.g.:

···

-----Original Message-----
From: Damphyr [mailto:damphyr@freemail.gr]
Sent: Tuesday, January 24, 2006 12:35 PM
To: ruby-talk ML
Subject: Making Array#uniq work

OK, according to the Pickaxe 2nd. Edition, Array#uniq judges
uniqueness
based on eql?. Somehow this doesn't seem to work for me :).
Following code returns the Array with two members instead of
the one I
would wish for. Any pointers? I'm running 1.8.2

----------------------------------------------------------
class A
   attr_accessor :a,:b
   def initialize a
     @a=a
     @b=Array.new
   end
   def << item
     @b<<item
   end
  
   def eql? other
     return true if @a==other.a && @b==other.b
   end
   
   def == other
     return eql?(other)
   end
   
   def hash
    a.hash * b.hash
   end
end

o1=A.new("a")
o2=A.new("a")
o1<<"o"
o2<<"o"
puts o1==o2
puts o1.eql?(o2)
p [o1,o2].uniq
----------------------------------------------------------

cheers

Simon