From: Nobuyoshi Nakada Date: 2009-12-02T17:00:03+09:00 Subject: [ruby-core:27000] [Bug #2420] super call may use wrong receiver object Bug #2420: super call may use wrong receiver object http://redmine.ruby-lang.org/issues/show/2420 Author: Nobuyoshi Nakada Status: Open, Priority: Normal Assigned to: Nobuyoshi Nakada, Category: core ruby -v: ruby 1.9.2dev (2009-12-01 trunk 25970) [i386-darwin9.0] 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