ruby对象模型如何工作?

时间:2014-08-06 17:53:21

标签: ruby object metaprogramming

我正在阅读Ruby中的MetaProgamming,我想了解类,对象和模块是如何构建的,类似于Class的超类是Module,但Module的类是Class。它就像是交织在一起的。

2.0.0-p451 :059 > MyClass.class
 => Class
2.0.0-p451 :060 > Class.class
 => Class
2.0.0-p451 :061 > MyClass.superclass
 => Object
2.0.0-p451 :062 > Class.superclass
 => Module
2.0.0-p451 :063 > Object.class
 => Class
2.0.0-p451 :064 > Module.class
 => Class

2 个答案:

答案 0 :(得分:1)

总结:

  • obj.class返回obj
  • 的类对象
  • 所有类对象的类型都为Class,对于任何类cls.classClass都是cls
  • Class本身就是一个类对象。 ModuleObject等也是如此。一流的课程是Ruby的一大特色(很多语言都没有)。

答案 1 :(得分:0)

我会尝试用我有限的知识回答。

您定义的任何类都自动成为Class的实例。

话说:

class MyClass

几乎相当于说:

MyClass = Class.new

两者之间的区别仅在于它们的范围 另一个是Jester下面所说的内容 class定义是一个范围门,意味着它开始了一个新的范围。

至于superclass - subclass(或parent - child)关系,表示child类(它是名为{的对象的实例{1}})从其Class类(也是对象parent的实例)继承方法。