赞 | 23 |
VIP | 207 |
好人卡 | 31 |
积分 | 31 |
经验 | 48797 |
最后登录 | 2024-5-11 |
在线时间 | 1535 小时 |
Lv3.寻梦者 孤独守望
- 梦石
- 0
- 星屑
- 3132
- 在线时间
- 1535 小时
- 注册时间
- 2006-10-16
- 帖子
- 4321
|
本帖最后由 IamI 于 2014-5-19 19:08 编辑
Value class & Ref class.
Ruby 这方面不清楚,为了避免被嘲笑,用托管C++(C++.Net)举例子。
Value Class,比如int(Fixnum), char, float,占用固定长度的字节,宣言的变量对应内存位置上仅有目标数值。
Value Class 在传值时,与源失去联系。
Value Class 可以被取成指针来达成别名,现代语言一般会提供一个指针封装,比如NSNumber与NSInteger,当然Ruby只有Fixnum。
Value Class 一般长度不是很长。
你可以用关键字struct来宣言一个Value Class。
仅在托管C++中,你可以用关键字value class 来宣言一个Value Class。
离开有效域,对象灭失。
Ref Class, 比如String,宣言的变量内存对应位置是一个指针(有GC的语言严格来说是句柄,或者可变指针),长度可以固定也可以变长,指向堆栈中的实际值。
现代语言中,一般不允许宣言Ref Class 的实体。Ruby 中除了Fixnum,Float,Bignum(存疑,我忘了……)以及RGSS的Rect,Color,Font(存疑)以外都是Ref Class。
这个类在传值时,依然是原来指向的对象,因为是指针传值。
这种类一般会提供一个Clone方法来获得一个Copy。
Ref Class 可以令人发指的长。
你可以用关键字class来宣言一个Ref Class。
仅在托管C++中,你可以用关键字ref class 来宣言一个Ref Class
不再有指针指向时,有GC的语言会析构对应实体。
Ruby 中只允许用class关键字宣言ref class。Struct是一个抽象类而不是关键字。 |
|