赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 38864 |
最后登录 | 2013-9-8 |
在线时间 | 238 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 238 小时
- 注册时间
- 2006-10-2
- 帖子
- 417
|
本帖最后由 猫哥哥 于 2009-7-3 14:38 编辑
class A
def initialize
B.new
end
end
class B
def initialize
#在这里获取调用者,应该是$a
end
end
$a = A.new
其中B类是自己定义的,A类和$a = A.new都是已经写好,不能更改不知内容的,只能 ...
zh99998 发表于 2009-3-17 20:46
那个……与其考虑怎么从class B获得A的实例,还不如直接从class A下手呢-_-|||
虽然不知道class A在其内部是怎么处理的,但既然class A也是一个类,它就有initialize,那么就通过alias定义- class A
- alias:old_init initialize
- def initialize
- $a = self
- old_init
- end
- end
复制代码 $a 就是生成的那个实例了。
为了看这个能不能用我还特意试验了一下:- class A
- attr_accessor:vv
-
- def initialize
- $a = self
- end
-
- end
- aa = A.new
- aa.vv = 6
- p $a.vv #=>输出 6
- exit
复制代码 所以感觉没有必要考虑class A在initialize以后还会怎么处理或者变化,因为$a会像指针一样一直指向这个实例(不知道把$a比喻成一个指针是否恰当-_-|||)。
-------------------------------------------------------------------------------------
如果想实现的是即时存档,也没必要把所有的object都保存了呀。只要存储一些会有变动的变量和object(在制作游戏的时候就设计好)通过marshal序列化存起来,其他的object照着存储的变量再临时生成就行了。
RGSS的储存方式也是这么做的。 |
|