Bug #9526

Method#owner returns wrong owner if using prepend.

Added by Kaneko Yuichiro about 1 month ago. Updated about 1 month ago.

[ruby-dev:47975]
Status:Rejected
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

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.

History

#1 Updated by Shugo Maeda about 1 month 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?

#2 Updated by Shugo Maeda about 1 month ago

  • Status changed from Open to Feedback

#3 Updated by Boris Stitnicky about 1 month 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.

#4 Updated by Kaneko Yuichiro about 1 month ago

Sorry, I misunderstood behavior of prepend. Shugo and Boris are right. Thanks for your quick responce. Please close this ticket :)

#5 Updated by Shugo Maeda about 1 month 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.

Also available in: Atom PDF