Bug #9526
closedMethod#owner returns wrong owner if using prepend.
Description
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.
Updated by shugo (Shugo Maeda) about 11 years ago
Kaneko Yuichiro wrote:
In this case, a class or module that defines a method is Blah.
So I think Blah.new.method(:x).owner should return Blah.
I don't catch your point.
Blah.new.x(1)
calls MyMod#x, so Blah.new.method(:x).owner
should return MyMod, shouldn't it?
Updated by shugo (Shugo Maeda) about 11 years ago
- Status changed from Open to Feedback
Updated by Anonymous about 11 years ago
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
.
Updated by yui-knk (Kaneko Yuichiro) about 11 years ago
Sorry, I misunderstood behavior of prepend. Shugo and Boris are right. Thanks for your quick responce. Please close this ticket :)
Updated by shugo (Shugo Maeda) about 11 years ago
- Status changed from Feedback to Rejected
Kaneko Yuichiro wrote:
Sorry, I misunderstood behavior of prepend. Shugo and Boris are right. Thanks for your quick responce. Please close this ticket :)
Thanks for your confirmation.