From: "matz (Yukihiro Matsumoto)" Date: 2012-11-28T16:10:04+09:00 Subject: [ruby-core:50251] [ruby-trunk - Bug #4559] Proc#== does not match the documented behaviour Issue #4559 has been updated by matz (Yukihiro Matsumoto). @ko1 You've chosen the latter option, so it is natural conclusion. Matz. ---------------------------------------- Bug #4559: Proc#== does not match the documented behaviour https://bugs.ruby-lang.org/issues/4559#change-34073 Author: aprescott (Adam Prescott) Status: Assigned Priority: Low Assignee: ko1 (Koichi Sasada) Category: core Target version: 2.0.0 ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux] =begin To see a paste concisely showing the problem, see https://gist.github.com/899026/ba84d66b02727675320dc4f031637d753a41c209 Code is shown below for 1.9.2p180. The documented behaviour (and my own expectation for (({#==}))) is: "Return true if prc is the same object as other_proc, or if they are both procs with the same body." RUBY_DESCRIPTION #=> ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux] proc { 1 } == proc { 1 } # => true proc { 1 + 1 } == proc { 1 + 1 } # => false proc { |x| x } == proc { |x| x } # => true proc { |x| x.foo } == proc { |x| x.foo } # => false lambda { 1 } == lambda { 1 } # => true lambda { 1 + 1 } == lambda { 1 + 1 } # => false lambda { |x| x } == lambda { |x| x } # => true lambda { |x| x.foo } == lambda { |x| x.foo } # => false Proc.new { 1 } == Proc.new { 1 } # => true Proc.new { 1 + 1 } == Proc.new { 1 + 1 } # => false Proc.new { |x| x } == Proc.new { |x| x } # => true Proc.new { |x| x.foo } == Proc.new { |x| x.foo } # => false Similar also occurs on 1.8.7; on version 1.8.7 (2011-02-18 patchlevel 334), all returned values are (({false})). I also reproduced this behaviour on 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]. Attached is a file which will (({puts})) the values. =end -- http://bugs.ruby-lang.org/