From: Tomas Matousek Date: 2009-12-02T07:14:30+09:00 Subject: [ruby-core:26984] [Bug #2419] super call may use wrong receiver object Bug #2419: super call may use wrong receiver object http://redmine.ruby-lang.org/issues/show/2419 Author: Tomas Matousek Status: Open, Priority: Normal ruby -v: ruby 1.8.6 (2009-03-31 patchlevel 368) [i386-mingw32] The code below prints: C main Object::m which means that the super calls the instance method B#m on a receiver that is not an instance of B. It's not what makes the super call to pick the main object as a receiver in this case. I would expect it to use the "self" object that the block captures, i.e. the class object C, and thus an exception "no superclass method `m' (NoMethodError)" should be raised. class B def m p self puts self.class.to_s + '::m' end end class C < B q = Proc.new do p self super() end mq = define_method :m, &q mq.call end BTW: The behavior is even worse in Ruby 1.9: ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32] C a.rb:11:in `==': wrong number of arguments(0 for 1) (ArgumentError) from a.rb:11:in `block in ' from a.rb:16:in `call' from a.rb:16:in `' from a.rb:8:in `
' ---------------------------------------- http://redmine.ruby-lang.org