class Taco
# . . .
end
Run Code Online (Sandbox Code Playgroud)
获得祖先链:
Taco.ancestors
#=> [Taco, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
假设我想找到"父"类,它是ruby定义方法的祖先链.我该怎么做呢?
例如 method_missing.parent.ancestors
如果一切都应该继承,BasicObject为什么不Kernel呢?
Object.ancestors
#=> [Object, Kernel, BasicObject]
Kernel.ancestors
#=> [Kernel]
BasicObject.ancestors
#=> [BasicObject]
Run Code Online (Sandbox Code Playgroud)
此外Class,从继承Class和Module但为什么我的Taco类祖先的链没有从他们那里继承,而是直接继承自Object前行?
Class.ancestors
#=> [Class, Module, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
您正在寻找所有者.
method(:puts).owner
#=> Kernel
method(:puts).owner.ancestors
#=> [Kernel]
Run Code Online (Sandbox Code Playgroud)
回到你的taco例子:
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]
Run Code Online (Sandbox Code Playgroud)
内核是一个实例module.看一下这个:
Kernel.class.ancestors
#=> [Module, Object, PP::ObjectMixin, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣,可以在这里进一步阅读 ruby对象模型.此外,这是从谷歌图像窃取的图像,可能有助于巩固这些概念.

| 归档时间: |
|
| 查看次数: |
1653 次 |
| 最近记录: |