论坛首页 编程语言技术论坛

玩转Ruby系列:玩转ruby的继承关系

浏览 8370 次
精华帖 (2) :: 良好帖 (1) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-06  
类是Class类实例化的对象
0 请登录后投票
   发表时间:2009-07-06  
Hooopo 写道
这幅图也不错..




问问看:这图用什么软件画的或实现
0 请登录后投票
   发表时间:2009-07-06  
maojieming 写道
问问看:这图用什么软件画的或实现

http://www.letrails.cn/archives/ruby-metaclass-tutorials
像是做图工具做的吧
0 请登录后投票
   发表时间:2009-10-13   最后修改:2009-10-13
Hooopo 写道
这幅图也不错..




这里应该是klass吧,摘自advance rails里的一段话
引用

Every Ruby object* has a set of fields in memory:
klass
    A pointer to the class object of this object. (It is klass instead of class because
    the latter is a reserved word in C++ and Ruby; if it were called class, Ruby
    would compile with a C compiler but not with a C++ compiler. This deliberate
    misspelling is used everywhere in Ruby.)


不过对于类继承之后的这个指针,就有点糊涂了
# 接着图中的那个类
class MailTrunk
  def self.c_method
    "mail trunk c method"
  end
end
class SubMailTrunk < MailTrunk
end


这里的SubMailTrunk的klass该指向哪呢?理论上应该是指向Class的,但是当我调用SubMailTrunk.c_method的时候是会出现"mail trunk c method"的,这和调用方法时的那个查找顺序貌似不一样阿

----------------------
刚发现把Hooopo话题理解偏了,扯成另外一个话题了,但有人能给解释下不
0 请登录后投票
   发表时间:2010-05-27  
-__-!!,求在c level Object和Class谁先被构造?貌似是鸡生蛋,蛋生鸡的问题,Object先构造?那时候Class还没有. Class先构造?那他的superclass指向啥呢,Object还没有呢,-_-!!!!
0 请登录后投票
   发表时间:2010-05-28   最后修改:2010-05-28
ruby-hacking-guide中讲得非常清楚,在第四章,貌似是一个很基础的问题

1243  rb_cObject = boot_defclass("Object", 0);
1244  rb_cModule = boot_defclass("Module", rb_cObject);
1245  rb_cClass =  boot_defclass("Class",  rb_cModule);
1246
1247  metaclass = rb_make_metaclass(rb_cObject, rb_cClass);
1248  metaclass = rb_make_metaclass(rb_cModule, metaclass);
1249  metaclass = rb_make_metaclass(rb_cClass, metaclass);

(object.c)

  86  VALUE
  87  rb_obj_class(obj)
  88      VALUE obj;
  89  {
  90      return rb_class_real(CLASS_OF(obj));
  91  }

  76  VALUE
  77  rb_class_real(cl)
  78      VALUE cl;
  79  {
  80      while (FL_TEST(cl, FL_SINGLETON) || TYPE(cl) == T_ICLASS) {
  81          cl = RCLASS(cl)->super;
  82      }
  83      return cl;
  84  }

(object.c)

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics