查看: 1817|回复: 3

[已经解决] 为何我的module会出现问题

[复制链接]
梦石
0
星屑
105
在线时间
297 小时
注册时间
2009-1-7
回帖
155
发表于 2014-1-12 02:30:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 timiesea 于 2014-1-12 14:21 编辑

我定义了一个module,如下:
[pre lang="ruby" line="1"]module GOLD_COLOR2
    Color1 = Color.new(255, 255, 255)  # 白
    Color2 = Color.new(128, 255, 128)  # 绿
    Color3 = Color.new(128, 128, 255)  # 蓝
    Color4 = Color.new(255, 0, 255)    # 紫
    Color5 = Color.new(255, 128, 128)  # 红
    Color6 = Color.new(255, 128, 0)    # 橙
   selfColor= Array.new([Color1,Color2,Color3,Color4,Color5,Color6]);
end[/pre]

在调用时我也写了如下脚本:
[pre lang="ruby" line="1"]GOLD_COLOR2::selfColor[1][/pre]

但是我在运行游戏的时候总是提示selfColor未定义(已经验证GOLD_COLOR2::Color1也会提示未定义)。我看系统默认的module也有这么类似的写法,例如:module Vocab

为何module Vocab不会提示而我的就会提示呢?

很遗憾,在F1中,module的介绍一笔带过。而网络上似乎都没有涉及到这个问题,大家如果知道原因的请赐教。

在[PSO]物品颜色描绘的脚本中,module进行了嵌套,不过在module脚本之前还有一段奇怪的脚本,我不知道是不是跟这个有关系:
[pre lang="ruby" line="1"]$_PS0 = {} if $_PS0 == nil  
$_PS0["Window_Base_Itemcolor"] = 20111227[/pre]
游戏群组:https://rpg.blue/forum.php?mod=group&fid=565在这里你可以看到我在制作游戏过程中分享的内容。
梦石
0
星屑
50
在线时间
103 小时
注册时间
2013-12-12
回帖
182
发表于 2014-1-12 09:23:57 | 显示全部楼层
本帖最后由 rmav 于 2014-1-12 09:30 编辑

这是ruby语法的问题,能看出区别吧
[pre lang="ruby" line="1"]#encoding:utf-8
  module GOLD_COLOR2
      Color1 = Color.new(255, 255, 255)  # 白
      Color2 = Color.new(128, 255, 128)  # 绿
      Color3 = Color.new(128, 128, 255)  # 蓝
      Color4 = Color.new(255, 0, 255)    # 紫
      Color5 = Color.new(255, 128, 128)  # 红
      Color6 = Color.new(255, 128, 0)    # 橙
     SelfColor= Array.new([Color1,Color2,Color3,Color4,Color5,Color6]);
   end
   
   msgbox GOLD_COLOR2::SelfColor.inspect
   msgbox GOLD_COLOR2::Color1.inspect[/pre]

那个 SelfColor= Array.new([Color1,Color2,Color3,Color4,Color5,Color6]);为什么要这样?
直接 SelfColor=[Color1,Color2,Color3,Color4,Color5,Color6]就行吧

点评

其实最后的那个分号是出错的关键吧。。。  发表于 2014-1-12 16:52
我看你是没看出这段代码与你上面代码的区别在何处吧。 这段代码是测试过正常的。你上面的代码是不正常的。  发表于 2014-1-12 15:50
之前我也是像你推荐的那么写的,但还是不行,所以换了个定义的方式。  发表于 2014-1-12 14:21
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2014-1-12 09:26:46 | 显示全部楼层
module里面的话~
除非class或者def里面~
其他的请全部用大写~
比如这样:
  1. module GOLD_COLOR2
  2.   COLOR1 = Color.new(2,2,2)
  3. end
复制代码
然后调用的时候:
  1. GOLD_COLOR2::COLOR1
复制代码
这样应该可以了~

然后PSO的脚本那个目测只是个版本号~
对脚本运行没什么影响的。

点评

事实证明,首字母大写就可以啦。多谢啦!这个细节我还真没注意!  发表于 2014-1-12 14:20
回复

使用道具 举报

梦石
0
星屑
50
在线时间
103 小时
注册时间
2013-12-12
回帖
182
发表于 2014-1-12 17:39:34 | 显示全部楼层
本帖最后由 rmav 于 2014-1-12 17:42 编辑

不是分号出错哦,是selfColor要大写开头,果然不容易发现。
分号只是表示一行结束

ruby各种变量的命名规范还是要注意下的。

点评

不客气哈^_^*  发表于 2014-1-14 20:51
受教了!  发表于 2014-1-12 19:16
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部