[ruby-dev:47842] Re: [ruby-cvs:51126] nobu:r43981 (trunk): hash.c: same hash value for similar constructs

From: Tanaka Akira <akr@...>
Date: 2013-12-03 13:53:11 UTC
List: ruby-dev #47842
2013/12/3  <nobu@ruby-lang.org>:
> nobu    2013-12-03 22:32:24 +0900 (Tue, 03 Dec 2013)
>
>   New Revision: 43981
>
>   http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=43981
>
>   Log:
>     hash.c: same hash value for similar constructs
>
>     * hash.c (rb_hash_recursive): make similar (recursive) constructs
>       return same hash value.  execute recursively, and rewind to the
>       topmost frame with an object which .eql? to the recursive
>       object, if recursion is detected.

eql? だけど hash が等しくない例を作って見ました。

% ./ruby -ve '
a1 = []
a2 = []
a3 = [{1=>a1, 2=>a2}]
a4 = [[a3]]
a1 << a3
a2 << a4
b1 = []
b2 = []
b3 = [{2=>b2, 1=>b1}]
b4 = [[b3]]
b1 << b3
b2 << b4
p a4.eql?(b4)
p a4.hash == b4.hash
'
ruby 2.1.0dev (2013-12-03 trunk 43981) [x86_64-linux]
true
false
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next