赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
本帖最后由 紫苏 于 2009-9-27 22:00 编辑
goahead那样确实是两个类,因为第二个 A 是在 Orz 这个名字空间中定义的,也就是 A 被定义为了 Orz 模块上下文中的一个常量,而不像第一个 A 是在顶层定义的,所以第一个 A 是全局常量~两个不同的常量,自然可以分别指向不同的类对象,即便父类不同,它们也是不同的类……
这就好比文件系统中,c:\ 下有一个叫 A 的文件,c:\Orz 下有个叫 A 的文件~- class A
- end
- class Orz
- class A
- end
- end
- p A.id, Orz::A.id # 不同
复制代码 另外通过 objct_id 测试发现我三楼说的有误,动态改变已定义类的父类的时候,原来的类是被抛弃了,原来的类名常量指向了一个新的 Class 对象,这个类就是为了继承制定父类而重新分配的一个父类~而新分配的这个子类并没有定义 test,所以直接继承了父类的 test,F12后的情况也应该是像上面说的那样~- class A
- end
- p A.id
- class A < Hash
- end
- p A.id
复制代码 |
|