From: matz@... (Yukihiro Matsumoto) Date: 2000-01-12T08:42:35+09:00 Subject: [ruby-talk:01105] Re: Infinite loop Hi, In message "[ruby-talk:01102] Re: Infinite loop" on 00/01/11, Clemens Hintze writes: |> |> Shouldn't there be a shift in there? | |No, please! I consider this a very nice property of Array#hash! But |unfortunately some old behavior is broken with this solution! You |cannot do | | a1 = ["hello", 2, "world"] | a2 = ["world", 2, "hello"] | a1.hash == a2.hash # Broken! | a1.hash |417265 | a2.hash |416997 | |With old implementation, it was possible as both calculated hash |numbers was equal! Furthemore I consider this behavior as inconsistent |regarding the example you have shown above. Hmm, the only requirement for `hash' method is * a.hash == b.hash where a.eql?(b) is true. So I guess your expectation may be too much. BTW, My second option was broken for arrays with string elements. How about like below? def hash h = self.id for item in self if item.kind_of? Array h ^= item.id else h ^= item.hash end end h end