On Mon, 19 Dec 2005 15:21:22 -0000, Logan Capaldo <logancapaldo / gmail.com> wrote: > > On Dec 19, 2005, at 9:10 AM, Andrea wrote: > >> I'm using an hash object and i use a Termine Object for the key and, for >> now, a String for the value. >> > > You need to overload the == operator and the hash method. > > class Termine > alias eql? == > def ==(other) > descrizione == other.descrizione and lingua == other. lingua > end > def hash > (descrizione + lingua).hash > end > end > > t = Termine.new("Hi") > t2 = Termine.new("Hi") > > t == t2 #=> true > > h = {} > h[t] = "short hello" > h #=> {#<Termine:0x24a22c @lingua="it", @descrizione="Hi">=>"short > hello"} > h.has_key?(t2) #=> true > I was playing around with this, and now I'm doubly worried I have a bug, or have missed something else. The last line in your code gives out 'false' for me. I was experimenting with this: class Dclz @str = "A string" attr_reader :str def ==(o) self.str == o.str end def ===(o) self.str === o.str end def hash self.str.hash end end case Dclz.new when Dclz.new puts "Works" else puts "doesn't" end # => "Works" h = Hash.new { "Failure" } h[d = Dclz.new] = "Expected" puts Dclz.new == Dclz.new # => true puts Dclz.new.hash == Dclz.new.hash # => true puts h[d] # => "Expected" puts h[Dclz.new] # => "Failure" huh????!!!! And I cannot understand what's happening here. Someone, please confirm that I'm either sane or stupid? (Tried on both ruby 1.8.3 (2005-09-21) [i386-linux] and ruby 1.9.0 (2005-12-16) [i686-linux]) -- Ross Bamford - rosco / roscopeco.remove.co.uk