Issue #4559 has been updated by ko1 (Koichi Sasada).


Matz (and akr) agreed that Proc#== only see the object_id.  I'll change behavior and documents.
----------------------------------------
Bug #4559: Proc#== does not match the documented behaviour
https://bugs.ruby-lang.org/issues/4559#change-28029

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/