如何获取定义方法的类?
我找到了如何查找后代和后代:在 Ruby 中查找类的所有后代
但这并不一定能让我成为定义类(实际上是最后一个定义类(。
我找到了如何获取调用类的方法: Ruby 继承 获取调用方类名
但我想要相反。我想知道如何获取定义类。
我也试过Module.nesting
.在这种情况下,这得到了我想要的东西,但我担心它会不一致,并且在我无法最终控制的大型代码库中是不可接受的。
puts RUBY_VERSION
# Test class vs super.
class Super
def test_func
puts "#{self.class}, #{ __method__}"
end
end
class Child < Super
def test_func2
self.test_func
end
end
Child.new.test_func
我曾希望:
1.8.7
超级, test_func
但是得到:
1.8.7
儿童, test_func
你问self.class
Child
对象,你得到了它。
您需要使用Method#owner
返回定义该方法的类或模块。
class Super
def test_func
puts "#{method(__method__).owner}, #{ __method__}"
end
end
class Child < Super
def test_func2
self.test_func
end
end
Child.new.test_func
# will print: Super, test_func
或者只是
Child.new.method(:test_func).owner
#=> Super
或
Child.instance_method(:test_func).owner
#=> Super