阿Q的博客

如果您发现任何问题,欢迎指正!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
uby meta-class 分析
ruby core 文档对class , object 和 meta-class 的描述如下:
Classes, modules, and objects are interrelated. In the diagram that follows, the vertical arrows represent inheritance, and the parentheses meta-classes. All metaclasses are instances of the class `Class’.

        

第一次看起来有点糊涂,让我们仔细的来分析一下。先说上面这个图吧
垂直箭头表示继承关系,括号中的(someclass)就是meta-classes,所有的meta-classes都是类Class的实例。
meta-classes是什么?
简单从一个例子说起吧

如果我们建立了一个Person类

irb(main):001:0> class Person
irb(main):002:1> end
=> nil
irb(main):003:0>

当ruby解释器执行上面代码,结束返回nil后,这时候我们就有了一个meta-class,叫Person,它是Class的一个实例
测试一下:
irb(main):003:0> Person.class
=> Class

看来它是Class类的一个实例,从图上看它的祖先是Object那么它也应该有Object类的方法 instance_of?(class)
测试一下:
irb(main):004:0> Person.instance_of?(Class)
=> true
哦,他果然是Class的实例。

再来看看meta-class (Object, Module, Class)
irb(main):005:0> Class.class
=> Class
irb(main):006:0> Module.class
=> Class
irb(main):007:0> Object.class
=> Class
irb(main):008:0>
可见ruby解释器加载时,就自动加载了Object类,Module类,Class类,所以己经生成了他们的meta-class
posted on 2008-03-21 17:27  坏份子  阅读(773)  评论(0编辑  收藏  举报