锁定老帖子 主题:玩转Ruby系列:玩转ruby的继承关系
精华帖 (2) :: 良好帖 (1) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-06
类是Class类实例化的对象
|
|
返回顶楼 | |
发表时间:2009-07-06
Hooopo 写道 这幅图也不错..
问问看:这图用什么软件画的或实现 |
|
返回顶楼 | |
发表时间:2009-07-06
maojieming 写道 问问看:这图用什么软件画的或实现
http://www.letrails.cn/archives/ruby-metaclass-tutorials 像是做图工具做的吧 |
|
返回顶楼 | |
发表时间: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话题理解偏了,扯成另外一个话题了,但有人能给解释下不 |
|
返回顶楼 | |
发表时间:2010-05-27
-__-!!,求在c level Object和Class谁先被构造?貌似是鸡生蛋,蛋生鸡的问题,Object先构造?那时候Class还没有. Class先构造?那他的superclass指向啥呢,Object还没有呢,-_-!!!!
|
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |