Ruby -- 获取定义类名

  • 本文关键字:定义 获取 Ruby ruby
  • 更新时间 :
  • 英文 :


如何获取定义方法的类?

我找到了如何查找后代和后代:在 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.classChild对象,你得到了它。

您需要使用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

最新更新