ehlo. > | But why the procedure is so complex? Why not just use 'operator <=>'? > | What I mean is that writing a good hash function may be not a simple > | task, but most keys can be ordered by <=>. > Do you mean you're proposing binary search instead of hash algorithm > for Hash objects, if keys can be orderd by "<=>"? I'm afraid it would > comprecate things even worse. Actually, I already changed my mind. I was too binded to C++ world, and forgot the fact that each Hash can have keys of various classes, so it is impossible to compare them by using <=> or eql?. What I cannot get is why Object::hash cannot be used for key? I had to define my own hash() to force key to be found; why cannot Object::hash compute hash based on all object variables? This would simplify things a bit. I.e.: ============================ class Key def initialize (x,y) @x, @y = x,y end def eql? (rhl) @x <=> rhl.x || @y <=> rhl.y end attr_reader :x, :y end key1 = Key.new(1,2) key2 = Key.new(1,2) print "hash1=#{key1.hash} hash1=#{key2.hash}\n" ============================ prints: hash1=84008036 hash1=84008024 This is result of Object::hash() call. Can Object::hash() use only values of object variables (@x and @y) when computing hash? dozen