查看: 1385|回复: 5

[已经解决] 增加新变量

[复制链接]
梦石
0
星屑
50
在线时间
8 小时
注册时间
2010-7-26
回帖
26
发表于 2010-8-11 22:52:03 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 majx0404 于 2010-8-12 20:37 编辑

如题,我想给武器增加一个新变量
而且希望它记录在$data_weapon里面
应该怎么做?
我直接打
module RPG
  class Weapon
    def initialize
      @新变量 = []
    end
    attr_accessor :新变量
  end
end
有办法加进去吗??

旅之愚者

梦石
0
星屑
560
在线时间
814 小时
注册时间
2007-7-28
回帖
2121

贵宾

发表于 2010-8-12 07:21:10 | 显示全部楼层
回复 majx0404 的帖子
你好大的胆子呀,直接把默认的initialize替换掉了
应该先alias的
  1. alias :origin_initialize :initialize
  2. def initialize
  3. origin_initialize
  4. @新变量 = []
  5. end
复制代码
回复

使用道具 举报

尽头

梦石
0
星屑
119
在线时间
278 小时
注册时间
2010-6-20
回帖
1204
发表于 2010-8-12 07:30:29 | 显示全部楼层
不懂alias的路过.....
我不明白用alias 后面:的后面为什么那么长.........

点评

我不看F1的 - -,,  发表于 2010-8-12 08:37
这个是为了命名更容易看懂  发表于 2010-8-12 08:35
回复

使用道具 举报

梦石
0
星屑
50
在线时间
8 小时
注册时间
2010-7-26
回帖
26
 楼主| 发表于 2010-8-12 08:07:33 | 显示全部楼层
都忘记这件事了,谢谢提醒@@
帮解说一下 Alias是用新方法取代原方法
alias : origin_initialize :initialize
以后initialize就被original initialize取代了
为什么这样做?因为同一个类中有相同方法的话
旧的会被新的盖掉,所以先把旧的用取代法改名,再重新定义一个initialize
def initialize
xxxxxx
xxxxxx
origin_initialize
end

中间把刚刚的initialize叫回来,就相当于在原本的def initialize上面加上两行xxxxxx了

点评

不是取代,是取别名,origin_initialize会指向initialize方法的位置  发表于 2010-8-12 08:31
回复

使用道具 举报

梦石
0
星屑
50
在线时间
8 小时
注册时间
2010-7-26
回帖
26
 楼主| 发表于 2010-8-12 09:25:19 | 显示全部楼层
还是有个问题….这样定义下的叫出的值都是nil
例如 $data_weapons[@weapon_id].hit_plus == nil
不是undefinded method 是nil
不晓得怎么回事 = =
回复

使用道具 举报

神隐的主犯

梦石
0
星屑
553
在线时间
271 小时
注册时间
2008-2-22
回帖
7534

贵宾

发表于 2010-8-12 09:27:16 | 显示全部楼层
回复 majx0404 的帖子

RPG 模块不会执行 initialize 方法,因为它是从文件中加载实例的,而不是生成的。

需要另外的函数来手动调用完成初始化。

点评

F1 里有说明~~  发表于 2010-8-12 10:17
原来如此 难怪找不到脚本参考  发表于 2010-8-12 10:11
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部