2013-07-30 37 views
0

该类具有超类Module,它具有超类Object,它具有超类BasicObject,它是Class的一个实例。而Class又是Module的一个子类。Ruby的类超类和子类结构

我真的很困惑对此。(以上是从使用上的每个上述对象的.class和.superclass方法收集)

谁能究竟给我解释一下是怎么回事?

+0

你对什么感到困惑?你的描述是正确的。你正确描述的是正在发生的事情。 – sawa

+1

同时查看[Class SuperClass Paradox](http://stackoverflow.com/questions/10558504/can-someone-explain-the-class-superclass-class-superclass-paradox)和[Ruby Metaclass Confusion](http:///stackoverflow.com/questions/10525053/ruby-metaclass-confusion)。 – coreyward

+0

我推荐由Ruby实体程序员在Ruby对象模型和元编程中使用ScreenCast系列: http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming – Tilo

回答

0

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

那个,和Class类型的对象,以及一个叫Object的类。

如果你能理解这些,至少在重复自己慢慢地,那么你已经得到它:

  • Object.new创建类对象的实例

  • Object是一个参考类别对象,这本身就是类别的对象类别

  • Class是参考类,这也是类类的对象(!)

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

    • 这是当你写的引擎盖下会发生什么部分class Foo
    • 其实Foo = Class.new(String)是一样一样的class Foo < String; end
  • Class的类层次结构,ModuleObject是一个实现Ruby中的细节。几乎所有的课程都从Object继承,所以Class也是如此。

其余的只是反复使用和经验。

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

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