`
winteen
  • 浏览: 12994 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[RubyHackingGuide]对象的基础RBasic

    博客分类:
  • Ruby
阅读更多
    比较大部分的对象类, 我们会发现它们都包含一个共同点: RBasic.

    RBasic的定义是:
   struct RBasic {  
      unsigned long flags;  
      VALUE klass;  
   }; 

 
    flags的结构如下:

  ruby中有一套FL_XXX宏来专门处理这个记录了对象在C层面的类型信息的标记.

    klass这个指针指向一个类对象.对一个String的实例来说, 见下图:

    大家应该能猜到, Ruby对象在响应消息时, 是通过klass来进行的.
    String这个Ruby层面上的类对象, 对应于C层面上一个RClass类型的变量.关于如何在C层面定义这样一个变量, 参见RClass.
 
    那么, 既然已经对象类的结构中已经存储了类对象(klass), 那么为什么还要在flags中存储对象类的结构信息呢? 我们很显然可以通过类对象反推出对象类的类型信息.ruby不这么做, 有两个原因: 不是所有的对象类都包含RBasic!例如RNode, 但它的第一个成员是flags, 这样ruby就可以统一处理对象类的类型信息了.(似乎只有一个原因诶.而且RNode是什么呢?Take it easy~)
  • 大小: 29.6 KB
  • 大小: 41.1 KB
  • 大小: 23.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics