From: Mathieu Bouchard Date: 2000-06-12T11:22:46-04:00 Subject: [ruby-talk:03339] Re: BUG or something? > |Question, how does Hash computes the hash value of a String? or of any > |object? > By invoking `hash' method of key object. well, not exactly. ts said: > See the method hash > Apparently ruby call the method hash for each object, except for T_FIXNUM > (it return the value) and T_STRING (rb_str_hash) > In 1.5 rb_str_hash is different than 1.4 (see #ifdef) well, I've taken a look, and it seems that there is a performance hack: "hash" is called directly on a String, just like "ts" said. If it wasn't a special case, then the following program would work. (that is, unless my program has bugs) --------8<----------------cut-here----------------8<--------istring.rb class IString < String def == (other); upcase == other.upcase; end def eql? (other); upcase.eql?(other.upcase); end def hash; upcase.hash; end end print "$a = ";p $a = "foo" print "$b = ";p $b = $a.upcase print "$c = ";p $c = IString.new($a) print "$c == $a : ";p $c == $a print "$a == $c : ";p $a == $c print "$c == $b : ";p $c == $b print "$b == $c : ";p $b == $c print "$a.hash == ";p $a.hash print "$b.hash == ";p $b.hash print "$c.hash == ";p $c.hash $H = {} $H[IString.new("unf")]=1; $H[IString.new("UNF")]=2; $H[IString.new("DOH")]=3; $H[IString.new("doh")]=4; p $H --------8<----------------cut-here----------------8<--------end btw, my error for not seeing the documentation for "hash". I was looking in String but it's documented in "Object". :-) Mathieu Bouchard