gpt4 book ai didi

ruby - 如何找到任何方法的祖先链?

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:49 25 4
gpt4 key购买 nike

class Taco
# . . .
end

获取祖先链:

Taco.ancestors
#=> [Taco, Object, Kernel, BasicObject]

假设我想找到“父”类及其 ruby​​ 定义方法的祖先链。我该怎么做?

例如method_missing.parent.ancestors

如果一切都应该继承BasicObject,为什么Kernel不继承?

Object.ancestors
#=> [Object, Kernel, BasicObject]

Kernel.ancestors
#=> [Kernel]

BasicObject.ancestors
#=> [BasicObject]

还有 Class 继承自 ClassModule 但为什么我的 Taco 类祖先链没有继承自它们而是直接从 Object 向前继承?

Class.ancestors
#=> [Class, Module, Object, Kernel, BasicObject]

最佳答案

您正在寻找owner .

method(:puts).owner 
#=> Kernel
method(:puts).owner.ancestors
#=> [Kernel]

回到你的炸 Jade 米饼示例:

class Taco
def self.eat
"YUM"
end
end

Taco.method(:eat).owner
#=> #<Class:Taco>
Taco.method(:eat).owner.ancestors
#=> [Class, Module, Object, PP::ObjectMixin, Kernel, BasicObject]

内核是模块的实例。检查一下:

Kernel.class.ancestors
#=> [Module, Object, PP::ObjectMixin, Kernel, BasicObject]

这是一些 further reading如果您有兴趣,可以在 ruby​​ 对象模型上阅读。此外,这是一张从谷歌图片中窃取的图片,可能有助于巩固这些概念。

ruby object model

关于ruby - 如何找到任何方法的祖先链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com