0
该类具有超类Module,它具有超类Object,它具有超类BasicObject,它是Class的一个实例。而Class又是Module的一个子类。Ruby的类超类和子类结构
我真的很困惑对此。(以上是从使用上的每个上述对象的.class和.superclass方法收集)
谁能究竟给我解释一下是怎么回事?
该类具有超类Module,它具有超类Object,它具有超类BasicObject,它是Class的一个实例。而Class又是Module的一个子类。Ruby的类超类和子类结构
我真的很困惑对此。(以上是从使用上的每个上述对象的.class和.superclass方法收集)
谁能究竟给我解释一下是怎么回事?
“实例”这个短语是你需要在这里做的心理体操的一小部分但是很重要的部分。
那个,和Class
类型的对象,以及一个叫Object
的类。
如果你能理解这些,至少在重复自己慢慢地,那么你已经得到它:
Object.new
创建类对象的实例
Object
是一个参考类别对象,这本身就是类别的对象类别
Class
是参考类类,这也是类类的对象(!)
Class.new
创建类类的一个实例。
class Foo
Foo = Class.new(String)
是一样一样的class Foo < String; end
的Class
的类层次结构,Module
,Object
是一个实现Ruby中的细节。几乎所有的课程都从Object
继承,所以Class
也是如此。
其余的只是反复使用和经验。
这里值得注意的是:您键入的代码中的标签是符号/变量名称,它们是指向具有类型和包含数据的底层对象的指针。没有要求直接使用这些标签,它们几乎与任何其他Ruby变量相同:
o_klass = Object
o_instance = o_klass.new
o_instance.class
=> Object
你对什么感到困惑?你的描述是正确的。你正确描述的是正在发生的事情。 – sawa
同时查看[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
我推荐由Ruby实体程序员在Ruby对象模型和元编程中使用ScreenCast系列: http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming – Tilo