From: eregontp@... Date: 2015-07-22T08:34:41+00:00 Subject: [ruby-core:70082] [Ruby trunk - Bug #11385] `==` with bidirectional/cyclic dependency Issue #11385 has been updated by Benoit Daloze. Should the result not be **false** instead? These two instances each have a different @friend and it cannot be determined if they are equal so "false" seems a much safer answer. Also, this seems inconsistent to how Comparable#== treat such cases: class Something attr_accessor :friend def initialize(friend) self.friend = friend end include Comparable def <=>(other) friend <=> other end end a = Something.new([]) b = Something.new([a]) a.friend = [b] p a == b # false (and not true like above!) ---------------------------------------- Bug #11385: `==` with bidirectional/cyclic dependency https://bugs.ruby-lang.org/issues/11385#change-53498 * Author: Allen Wang * Status: Rejected * Priority: Normal * Assignee: ruby-core * ruby -v: 2.2.1 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ```ruby class Something attr_accessor :friend def initialize(friend) self.friend = friend end def ==(other) friend == other.friend end end a = Something.new([]) b = Something.new([a]) a.friend = [b] a == b ``` The above code returns true on OS X and Linux, by right it should give me a exception of stack level too deep. ( And on windows I can see the expected exception ) ---Files-------------------------------- test.rb (226 Bytes) -- https://bugs.ruby-lang.org/