Ruby——获取定义类名
如何获得在中定义了方法的类 我发现了如何查找后代和鸟类: 但这并不一定能让我真正了解定义类的最后一个定义类 我已经找到了如何获得调用类: 但我想要相反的结果。我想知道如何获得定义类 我还尝试了Module.nesting。在这种情况下,这就得到了我想要的东西,但我担心它会不一致,在我无法最终控制的更大的代码库中是不可接受的Ruby——获取定义类名,ruby,Ruby,如何获得在中定义了方法的类 我发现了如何查找后代和鸟类: 但这并不一定能让我真正了解定义类的最后一个定义类 我已经找到了如何获得调用类: 但我想要相反的结果。我想知道如何获得定义类 我还尝试了Module.nesting。在这种情况下,这就得到了我想要的东西,但我担心它会不一致,在我无法最终控制的更大的代码库中是不可接受的 puts RUBY_VERSION # Test class vs super. class Super def test_func puts &q
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
超级,测试函数
但是得到:
1.8.7
子测试函数
您询问了子对象的self.class,得到了它
您需要使用返回定义该方法的类或模块
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
您询问了子对象的self.class,得到了它
您需要使用返回定义该方法的类或模块
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
Ruby 1.8.7非常陈旧,非常过时,因此如果你有任何升级的方法,这将对Ruby有很大帮助,因为从那以后Ruby上发生了很多新的事情,最关键的是,包括适当的UTF-8支持。不太有趣的是,对于这个特定的项目,我坚持使用1.8.7。更糟糕的是,我不能使用宝石/这听起来像是乐趣的反面。希望你能活下来!Ruby 1.8.7非常陈旧,非常过时,因此如果你有任何升级的方法,这将对Ruby有很大帮助,因为从那以后Ruby上发生了很多新的事情,最关键的是,包括适当的UTF-8支持。不太有趣的是,对于这个特定的项目,我坚持使用1.8.7。更糟糕的是,我不能使用宝石/这听起来像是乐趣的反面。希望你能活下来!这太棒了!它在1.8.7中工作。非常感谢。我用它来添加一个日志行,而不是手动键入类和方法。我已经对你的答案投了赞成票。我找不到在哪里把它标记为已接受。也许这是因为我的名声微乎其微?考虑到test_func必须是Child.new,为什么不选择UnboundMethodowner呢?jayreed1,您需要以编程方式定义它的类,还是仅仅为了查看它,以便进行调试,比如说。如果是后者,请查看…method:some_method的返回值,您将看到它就在那里,您不必附加.owner…例如,22.method:zero?=>,显示Integerzero?是用数值定义的,而22.method:+=>告诉我们Integer+是用Integer定义的,因为它被解释为.Or Child.instance\u method:test\u func.owner,所以您不必创建实例。这太棒了!它在1.8.7中工作。非常感谢。我用它来添加一个日志行,而不是手动键入类和方法。我已经对你的答案投了赞成票。我找不到在哪里把它标记为已接受。也许这是因为我的名声微乎其微?考虑到test_func必须是Child.new,为什么不选择UnboundMethodowner呢?jayreed1,您需要以编程方式定义它的类,还是仅仅为了查看它,以便进行调试,比如说。如果是后者,请查看…method:some_method的返回值,您将看到它就在那里,您不必附加.owner…例如,22.method:zero?=>,显示Integerzero?是用Numeric定义的,而22.method:+=>告诉我们Integer+是用Integer定义的,因为Integer被解释为.Or Child.instance\u method:test\u func.owner,所以您不必创建实例。