Ruby的类超类和子类结构

时间:2013-07-30 17:55:16

标签: ruby

Class有超类Module,它有超类Object,它有超类BasicObject,它是Class的一个实例。而Class又是Module的子类。

我真的对此感到困惑。(以上是通过在上述每个对象上使用.class和.superclass方法收集的)

任何人都可以向我解释一下究竟发生了什么吗?

1 个答案:

答案 0 :(得分:0)

短语“实例”是你需要在这里做的心理体操的一个小而重要的部分。

那个,类型为Class的对象,以及一个名为Object的类。

如果你能理解这些,至少在慢慢地重复自己的时候,你就得到了它:

  • Object.new创建类 Object 的实例

  • Object是对 Object 类的引用,它本身就是类 Class 的对象

  • Class是类 Class 的引用,它也是类 Class (!)

  • Class.new创建一个类 Class 的实例。

    • 这是您撰写class Foo
    • 时发生的事情的一部分
    • 事实上,Foo = Class.new( String )class Foo < String; end
    • 大致相同
  • ClassModuleObject的类层次结构是Ruby中的实现细节。几乎所有类都继承自Object,所以Class也这样做也不足为奇。

其余的只是重复使用和体验。

值得注意的是其他内容:您键入的代码中的标签是符号/变量名称,它们是具有类型和包含数据的基础对象的指针。没有要求直接使用这些标签,它们与任何其他Ruby变量几乎相同:

o_klass = Object
o_instance = o_klass.new
o_instance.class
 => Object