Method#owner returns wrong owner if using prepend

Issue #9526 has been updated by Boris Stitnicky.

Also for me, this is the expected behavior. MyMod is prepended before
Blah, and therefore Blah.new.method( :x ) is taken from MyMod. As
soon as you perform module MyMod; remove_method( :x ) end, method x
will be again taken from Blah.


Bug #9526: Method#owner returns wrong owner if using prepend.
https://bugs.ruby-lang.org/issues/9526#change-45227

  • Author: Kaneko Yuichiro
  • Status: Feedback
  • Priority: Normal
  • Assignee:
  • Category:
  • Target version:
  • ruby -v: ruby-2.0.0-p353 [ x86_64 ] & ruby-2.1.0 [ x86_64 ]
  • Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN

rdoc indicates that Method#owner will return a class or module that
defines a method.
http://www.ruby-doc.org/core-2.0/Method.html#method-i-owner


module MyMod
def x(y)
super(y*y)
end
end

class Blah
def x(y)
y + 1
end
prepend MyMod
end

Blah.new.method(:x).owner
# => MyMod

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs