常量,顾名思义就是在游戏过程中永远保持一个特定数据的量,它不会随着外界环境的变化而发生改变,一直保有它的数据,并可以将这些数据传给其他对象比如变量。
就像我们通常用姓名或ID来标识自己一样,用来标识常量的东西叫做常量名。姓名不能胡乱起,注册ID更是有诸多限制,而给常量取名也是一样有规矩的。Ruby中常量名的命名规则是:
以大写字母开头,其后可以跟大小写字母、下划线或者数字,且不能是系统保留字。
比如以下就是一个合法的常量名:
CENTER_X
而以下这些就不能作为常量名:
BEGIN (系统保留字)
b_2 (不是大写字母开头)
T-5 (出现了不合法的字符)
大写字母开头的系统保留字一共有两个,给常量取名时注意避开:
BEGIN END
常量名的定义和初始化(就是给常量一个值)使用赋值号"=":比如下面这样
CENTER_X = 240
这样就定义了一个常量CENTER_X,它是一个整数型常量,其值是240。
然后我们来看一下这个常量的值:
p CENTER_X
运行结果:显示一个对话框,上面是数字240。
常量的作用范围是它所处的对象类内部,在这里它一直有效。常量可以在不同层次的对象中重复定义,取值时以内层的优先。这点和后面要讲到的变量不一样。
关于常量的作用范围,我们来看这样一个例子:
把上例中的脚本拆成两条事件指令,像下图那样:
然后保存并执行游戏,和事件NPC说话,结果和上例是一样的。
然后再进一步:
把上例中的脚本拆成两个事件,分别放到两个NPC上,保存后执行游戏,先和执行
CENTER_X = 240
的NPC说话,再和执行
p CENTER_X
的NPC说话,结果和上例依然是一样的。
这里引出一个问题:未定义的常量是不能引用的,如果你和NPC说话的顺序反了,就会出现下面这个结果:
这个提示的意思是,存在未经定义的常量 CENTER_X。
以后记住,当使用一个常量时,一定要先行定义。
索性更极端一些吧。
新建一张地图,把后面那个NPC放到新地图上去,再在前一张地图的脚本事件后加一个“场所移动”事件,移到新地图上。
好了,执行游戏,先后和两张地图上的NPC说话,你看见了什么?
--依然是一模一样的结果。
这已经充分说明了常量的作用范围是相当大的。实际上,即使不是在这个对象类中,你也可以通过前面加对象类名称的方法调用别的对象的常量。
第三节 变量
大凡接触RPG Maker的对“变量”这个概念应该不会陌生。默认工程里提供了50个变量给你,你可以扩充到多达5000个。变量在游戏进程中持有一个数值,它的数值是可以随时改变的。
数值可以随时改变,这是常量和变量最大的不同。
变量是存放在内存的某个地址中的。要访问这个变量,当然也要用到变量的标识符——变量名。Ruby的变量名命名规则是:
以小写字母、下划线或接头符$或@开头,其后可跟大小写字母,数字,下划线,但不能是系统保留字。
比如以下是合法的变量名:
abc
variable_x
$game_temp
@phase4_step
以下则不能用作变量名:
def (系统保留字)
Amy (不是以小写字母/下划线/接头符开头)
x31-bc0(出现了非法字符)
需要注意的是,对于系统保留字,一旦前面加上了接头符就不再作为保留字:
@def
$def
都是允许作为变量名使用的,系统中以小写字母开头的保留字一共36个,取名时注意回避:
alias and begin break
case class def defined?
do else elsif end
ensure false for if
in module next nil
not or redo rescue
retry return self super
then true undef unless
until when while yield
变量的定义也是通过赋值来进行。作为脚本语言,Ruby没有对变量进行非常严格的类型控制,只要不执行自运算操作而是简单的赋值,你可以随时将已经存放了某一类型数据的变量更改成另一种类型数据的变量。
我们来看一个例子:
abc = 4
p abc
abc = 5
p abc
abc = "I'm sorry"
p abc
这里连续对abc进行了3次定义,并一次次的输出它们的值。
运行的结果应该是先后显示3个对话框,分别是4,5和字符串"I'm sorry"。
下面我们来研究一下,既然常量有那么大的作用范围,那变量的作用范围又有多大呢?奇怪的接头符是什么意思呢?如果变量没定义就要它输出,会是什么结果呢?
实验还是重复先前的步骤,首先将变量的赋值和输出拆成两个事件指令。
执行的结果竟然是在这一步就出现了问题,系统报错误:
说没有定义一个叫做abc的局部变量。
重来,修改它们,在abc前面加上@接头符。
这会再执行,结果正常了,显示一个对话框上面是1。
第二步是将这两条语句拆分到两个事件里,然后执行游戏,和两个NPC分别说话,这回不再报错了。
如果先和第一个NPC,再和第二个NPC说话,将显示1,如果直接去和第二个NPC说话,将显示nil,而不是像先前常量那样报错。
这里我们可以得出结论,带有@接头符的变量,当它在被定义前就要求输出时,会自动定义并赋予一个nil的初始值。nil表示“空”“什么都没有”的意思。
然后再做一步,将这两个NPC扔到两张地图上,给前张地图一个场所移动,结果仍然会正常输出1。
这说明,只要变量带上了@接头符,它的作用范围就已经相当于常量的作用范围了,至少在我们所目前接触到的事件脚本里,它是一直通用的。
不过,以后深入系统对象以后,你会发现,@接头符的变量只能在自己的对象里使用,从对象外部是调用不了的(不像常量可以通过对象类名称来调用)。我们之所以放在事件脚本里用@就足够,是因为事件脚本从属于“事件解释器”这个对象,自然一直都能使用。如果想创造一个任何情况下都可以用的变量,请使用接头符$。
$的作用是使变量全域化,它会在任何时间任何地方允许Ruby程序访问、调用、计算这个变量。
重做以上实验,把@换成$,你会发现结果是完全一样的,无论如何都不会报错。和@一样,没有定义过的$变量在输出时也会自动给一个nil值。
好了,关于常量和变量的部分已经讲完了。也许你看的半懂半糊涂之际,还觉得有点不过瘾吧,连事件的“变量操作”都不是仅仅一个代入的操作呢,至少还有加、减、乘、除等其他方法,难道Ruby的变量就只能完成简单的代入值吗?好,请看第三章:句法构造和表达式。作者: SailCat 时间: 2005-11-9 06:34 标题: 跟我从头学Ruby(2) 第二章 常量与变量
常量,顾名思义就是在游戏过程中永远保持一个特定数据的量,它不会随着外界环境的变化而发生改变,一直保有它的数据,并可以将这些数据传给其他对象比如变量。
就像我们通常用姓名或ID来标识自己一样,用来标识常量的东西叫做常量名。姓名不能胡乱起,注册ID更是有诸多限制,而给常量取名也是一样有规矩的。Ruby中常量名的命名规则是:
以大写字母开头,其后可以跟大小写字母、下划线或者数字,且不能是系统保留字。
比如以下就是一个合法的常量名:
CENTER_X
而以下这些就不能作为常量名:
BEGIN (系统保留字)
b_2 (不是大写字母开头)
T-5 (出现了不合法的字符)
大写字母开头的系统保留字一共有两个,给常量取名时注意避开:
BEGIN END
常量名的定义和初始化(就是给常量一个值)使用赋值号"=":比如下面这样
CENTER_X = 240
这样就定义了一个常量CENTER_X,它是一个整数型常量,其值是240。
然后我们来看一下这个常量的值:
p CENTER_X
运行结果:显示一个对话框,上面是数字240。
常量的作用范围是它所处的对象类内部,在这里它一直有效。常量可以在不同层次的对象中重复定义,取值时以内层的优先。这点和后面要讲到的变量不一样。
关于常量的作用范围,我们来看这样一个例子:
把上例中的脚本拆成两条事件指令,像下图那样:
然后保存并执行游戏,和事件NPC说话,结果和上例是一样的。
然后再进一步:
把上例中的脚本拆成两个事件,分别放到两个NPC上,保存后执行游戏,先和执行
CENTER_X = 240
的NPC说话,再和执行
p CENTER_X
的NPC说话,结果和上例依然是一样的。
这里引出一个问题:未定义的常量是不能引用的,如果你和NPC说话的顺序反了,就会出现下面这个结果:
这个提示的意思是,存在未经定义的常量 CENTER_X。
以后记住,当使用一个常量时,一定要先行定义。
索性更极端一些吧。
新建一张地图,把后面那个NPC放到新地图上去,再在前一张地图的脚本事件后加一个“场所移动”事件,移到新地图上。
好了,执行游戏,先后和两张地图上的NPC说话,你看见了什么?
--依然是一模一样的结果。
这已经充分说明了常量的作用范围是相当大的。实际上,即使不是在这个对象类中,你也可以通过前面加对象类名称的方法调用别的对象的常量。
第三节 变量
大凡接触RPG Maker的对“变量”这个概念应该不会陌生。默认工程里提供了50个变量给你,你可以扩充到多达5000个。变量在游戏进程中持有一个数值,它的数值是可以随时改变的。
数值可以随时改变,这是常量和变量最大的不同。
变量是存放在内存的某个地址中的。要访问这个变量,当然也要用到变量的标识符——变量名。Ruby的变量名命名规则是:
以小写字母、下划线或接头符$或@开头,其后可跟大小写字母,数字,下划线,但不能是系统保留字。
比如以下是合法的变量名:
abc
variable_x
$game_temp
@phase4_step
以下则不能用作变量名:
def (系统保留字)
Amy (不是以小写字母/下划线/接头符开头)
x31-bc0(出现了非法字符)
需要注意的是,对于系统保留字,一旦前面加上了接头符就不再作为保留字:
@def
$def
都是允许作为变量名使用的,系统中以小写字母开头的保留字一共36个,取名时注意回避:
alias and begin break
case class def defined?
do else elsif end
ensure false for if
in module next nil
not or redo rescue
retry return self super
then true undef unless
until when while yield
变量的定义也是通过赋值来进行。作为脚本语言,Ruby没有对变量进行非常严格的类型控制,只要不执行自运算操作而是简单的赋值,你可以随时将已经存放了某一类型数据的变量更改成另一种类型数据的变量。
我们来看一个例子:
abc = 4
p abc
abc = 5
p abc
abc = "I'm sorry"
p abc
这里连续对abc进行了3次定义,并一次次的输出它们的值。
运行的结果应该是先后显示3个对话框,分别是4,5和字符串"I'm sorry"。
下面我们来研究一下,既然常量有那么大的作用范围,那变量的作用范围又有多大呢?奇怪的接头符是什么意思呢?如果变量没定义就要它输出,会是什么结果呢?
实验还是重复先前的步骤,首先将变量的赋值和输出拆成两个事件指令。
执行的结果竟然是在这一步就出现了问题,系统报错误:
说没有定义一个叫做abc的局部变量。
重来,修改它们,在abc前面加上@接头符。
这会再执行,结果正常了,显示一个对话框上面是1。
第二步是将这两条语句拆分到两个事件里,然后执行游戏,和两个NPC分别说话,这回不再报错了。
如果先和第一个NPC,再和第二个NPC说话,将显示1,如果直接去和第二个NPC说话,将显示nil,而不是像先前常量那样报错。
这里我们可以得出结论,带有@接头符的变量,当它在被定义前就要求输出时,会自动定义并赋予一个nil的初始值。nil表示“空”“什么都没有”的意思。
然后再做一步,将这两个NPC扔到两张地图上,给前张地图一个场所移动,结果仍然会正常输出1。
这说明,只要变量带上了@接头符,它的作用范围就已经相当于常量的作用范围了,至少在我们所目前接触到的事件脚本里,它是一直通用的。
不过,以后深入系统对象以后,你会发现,@接头符的变量只能在自己的对象里使用,从对象外部是调用不了的(不像常量可以通过对象类名称来调用)。我们之所以放在事件脚本里用@就足够,是因为事件脚本从属于“事件解释器”这个对象,自然一直都能使用。如果想创造一个任何情况下都可以用的变量,请使用接头符$。
$的作用是使变量全域化,它会在任何时间任何地方允许Ruby程序访问、调用、计算这个变量。
重做以上实验,把@换成$,你会发现结果是完全一样的,无论如何都不会报错。和@一样,没有定义过的$变量在输出时也会自动给一个nil值。
好了,关于常量和变量的部分已经讲完了。也许你看的半懂半糊涂之际,还觉得有点不过瘾吧,连事件的“变量操作”都不是仅仅一个代入的操作呢,至少还有加、减、乘、除等其他方法,难道Ruby的变量就只能完成简单的代入值吗?好,请看第三章:句法构造和表达式。作者: bluefool 时间: 2005-11-9 06:36
哇哇,先抢沙发.....{/dy}