[ruby-dev:47978] [ruby-trunk - Bug #9526] Method#owner returns wrong owner if using prepend.
From:
boris@...
Date:
2014-02-18 05:16:10 UTC
List:
ruby-dev #47978
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
--------------------
In this case, a class or module that defines a method is Blah.
So I think Blah.new.method(:x).owner should return Blah.
--
http://bugs.ruby-lang.org/