>>>>> "Y" == Yukihiro Matsumoto <matz / netlab.co.jp> writes:

Y> Hmm, the only requirement for `hash' method is

Y>   * a.hash == b.hash where a.eql?(b) is true.

 I've not understood, sorry. Do you mean 

 1) if a.eql?(b) then a.hash == b.hash

 or

 2) if a.hash == b.hash then a.eql?(b) is true

Y> So I guess your expectation may be too much.

Y> BTW, My second option was broken for arrays with string elements.
Y> How about like below?

Y>          def hash
Y>            h = self.id
Y>            for item in self
Y>              if item.kind_of? Array
Y>                h ^= item.id
Y>              else
Y>                h ^= item.hash
Y>              end
Y>            end
Y>            h
Y>          end

 This don't work for the first case with [1, 2, [1, 2]] and [1, 2, [1, 2]]

 a.hash != b.hash and a.eql?(b) is true

p.s. : I've not understood the interest to have a recursive array.


Guy Decoux