设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4579|回复: 10
打印 上一主题 下一主题

[讨论] 悟了,悟了,终于明白变量这玩意到底是啥了

[复制链接]

Lv3.寻梦者

孤独守望

梦石
0
星屑
3121
在线时间
1534 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

1
发表于 2014-5-19 19:06:39 | 显示全部楼层
本帖最后由 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是一个抽象类而不是关键字。
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-9 03:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表