Skip to content

Instantly share code, notes, and snippets.

@jrafanie
Last active February 2, 2016 16:25
Show Gist options
  • Save jrafanie/0e5b8a9f4e8b4f84913f to your computer and use it in GitHub Desktop.
Save jrafanie/0e5b8a9f4e8b4f84913f to your computer and use it in GitHub Desktop.
ruby Method#owner lies
1.9.3
ChildClass#f, owner: ParentClass, original_name:
ParentClass#f, owner: ParentClass, original_name:
ChildClass#g1, owner: GrandparentClass, original_name:
ParentClass#g1, owner: GrandparentClass, original_name:
ChildClass#g2, owner: ParentClass, original_name:
ParentClass#g2, owner: ParentClass, original_name:
2.0.0
ChildClass#f, owner: ParentClass, original_name:
ParentClass#f, owner: ParentClass, original_name:
ChildClass#g1, owner: GrandparentClass, original_name:
ParentClass#g1, owner: GrandparentClass, original_name:
ChildClass#g2, owner: GrandparentClass, original_name:
ParentClass#g2, owner: GrandparentClass, original_name:
2.1.8
ChildClass#f, owner: ParentClass, original_name: f
ParentClass#f, owner: ParentClass, original_name: f
ChildClass#g1, owner: GrandparentClass, original_name: g1
ParentClass#g1, owner: GrandparentClass, original_name: g1
ChildClass#g2, owner: GrandparentClass, original_name: g1
ParentClass#g2, owner: GrandparentClass, original_name: g1
2.2.4
ChildClass#f, owner: ParentClass, original_name: f
ParentClass#f, owner: ParentClass, original_name: f
ChildClass#g1, owner: GrandparentClass, original_name: g1
ParentClass#g1, owner: GrandparentClass, original_name: g1
ChildClass#g2, owner: GrandparentClass, original_name: g1
ParentClass#g2, owner: GrandparentClass, original_name: g1
2.3.0
ChildClass#f, owner: ParentClass, original_name: f
ParentClass#f, owner: ParentClass, original_name: f
ChildClass#g1, owner: GrandparentClass, original_name: g1
ParentClass#g1, owner: GrandparentClass, original_name: g1
ChildClass#g2, owner: ParentClass, original_name: g1
ParentClass#g2, owner: ParentClass, original_name: g1
class GrandparentClass
def g1
1
end
end
class ParentClass < GrandparentClass
def f
g2
end
alias g2 g1
end
class ChildClass < ParentClass
end
puts RUBY_VERSION
[:f, :g1, :g2].each do |m|
method = ChildClass.new.method(m)
puts "ChildClass##{m}, owner: #{method.owner}, original_name: #{method.original_name if method.respond_to?(:original_name)}"
method = ParentClass.new.method(m)
puts "ParentClass##{m}, owner: #{method.owner}, original_name: #{method.original_name if method.respond_to?(:original_name)}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment