Project1

标题: 新手教程——函数外的常量(理论篇)_(3) [打印本页]

作者: 一箭烂YiJL    时间: 2010-12-11 09:53
标题: 新手教程——函数外的常量(理论篇)_(3)
本帖最后由 一箭烂YiJL 于 2010-12-11 12:52 编辑

课序号:3
作者:一箭烂YiJL
出版社:VX教程出版社
售价:免费
VX教程出版社的其它教程

上一课:
新手教程——计算累计时间Window

注:适用于class类
这次我要说的是如何在函数外设定常量。


序:
要在函数外设定常量(能在函数内调用),好处在于方便修改,下边是个简单规模:
  1. class Scene_Model < Scene_Base # 其实不一定是Scene,适用于class类
  2.   
  3.   X = 1                  # X坐标
  4.   Y = 2                  # Y坐标
  5.   WIDTH = 90             # 宽度
  6.   HEIGHT = 160           # 高度
  7.   TILENAME = "模拟标题"  # 标题
  8.   
  9.   def terminate
  10.     ...... # 这里不成立的
  11.   end
  12.   
  13.   def start
  14.     ...... # 这里不成立的
  15.   end
  16.   
  17.   def update
  18.     ...... # 这里不成立的
  19.   end
  20.   
  21. end
复制代码
可能大家也看过一些实用脚本有着类似这样的东西,
这样既方便修改,又能让实用的脚本新手用得更称心。
认真的说:在类中存放常量是为了提高程序的可移植性,
就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。



Q:为什么函数外的变量是大楷?
A:字头大楷即可。

Q:这些变量必须是在同一各类里才能使用吗?
A:刚才说的方法是必须的。

Q:有方法能让参数不再同一个类?
A:方法是有的,待会儿会说。


正式开始:

A.类内常量

简单式:
  1. class Model
  2.   X = 1
  3.   def
  4.     @window_command.x = X     # =>1
  5.   end
  6. end
复制代码
数组式:

  1. class Model
  2.   #     X  Y 坐标
  3.   XY = [2, 4]
  4.   def
  5.     @window_command.x = XY[0]     # =>2
  6.     @window_command.y = XY[1]     # =>4
  7.     #XY[0]是指XY数组内的第一个参数,数组是从0开始数起的
  8.   end
  9. end
复制代码
哈希式:

  1. class Model
  2.   #     X坐标     Y坐标
  3.   XY = {:x => 5, :y => 0}
  4.   def
  5.     @window_command.x = XY[:x]     # =>5
  6.     @window_command.y = XY[:y]     # =>0
  7.   end
  8. end
复制代码
注意:要记得数组式和哈希式中间有个","逗号。




B.module 模块类

这一种方法亦被利用于Vocab。(不知道有Vocab这脚本页的不要理会)
不过这种方法比较复杂,所以供于脚本基础较高的同学学习研究。
注意:这必须插在类之外的。
他是除了class类外的另外一种类。


建立方法:

  1. module Model
  2.   X = 1
  3. end
复制代码
调用方法(有两种方法):

一、用下述方法让Model里的所有变量变成这个类的常量。
在类中加进这句:

  1. include  Model  # 把所有Model里所有的常量拿进来
复制代码
这种方法虽然方便,但有常量相同时则很麻烦。


二、调用当中的一两个变量:

  1. X = Model::X   # Model的X代进这里的X
复制代码
以下是个简单例范

  1. module Model
  2.   X = 1
  3.   Y = 2
  4.   WeightLength = {:W =>3, :L => 4}
  5. end
  6. class Text < Scene_Base
  7.   X = Model::X
  8.   Y = Model::Y
  9.   W = Model::WeightLength[:L]
  10.   L = Model::WeightLength[:W]
  11.   # 现在X是1,Y是2,W是3,L是4
  12.   p X + Y + W + L   # =>10(加出来的)
  13. end
复制代码
当你再用:
$scene = Text.new
的时候,有个窗口会显示10,因为是有XYWL四个常量加起来的。


总结,我们学到了:
1.使用类外的常量
2.module模块类
3.调用module里的常量
4.数组(Array)
5.哈希(Hash)



看完教程请回复,
我们需要的是支持!!


好了,这堂理论课上完了,谢谢大家。

下一课:
新手教程——函数外的常量(实战篇)

作者: 企鹅达达    时间: 2010-12-11 12:17
看完,很好
作者: DeathKing    时间: 2010-12-11 12:39
本帖最后由 DeathKing 于 2010-12-11 12:39 编辑

我来纠正一个小错误:与其说是“变量”,不如更准确的说是“常量”。

想一想,所有的常量标识符都是以大写字母开头的(类的名称就是常量标识符)。计算机科学中,常量是在某一阶段保持不变的量,但Ruby的动态性使得常量也可以随时改变。

刚好之前解答了一个关于“解析域”的问题:http://rpg.blue/thread-162792-1-1.html

[line]1[/line]
在类中存放常量是为了提高程序的可移植性,就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。
作者: 禾西    时间: 2010-12-11 12:49
雖然ruby中常量和變量的區別很模糊,但是這樣預定義的確是是常量。因為在程序運行中,他們的確不會改變
作者: summer92    时间: 2010-12-12 15:52
学习一下model,用这个应该能更好管理脚本?


summer92于2010-12-13 10:02补充以下内容:
是啊,模块,下次讲讲把.....
作者: mummyx    时间: 2011-2-9 10:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 一箭烂YiJL    时间: 2011-2-9 10:43
回复 mummyx 的帖子

笔误:W变了L,L变了W,谢提醒。
(不过我也懒得修改了,喂喂!6楼补充啊,六楼补充。)
作者: mummyx    时间: 2011-2-9 10:47
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1