mud常量和变量类型
2007/5/10 20:50:33

常量和变量类型
--------------------------------------------------------------------------------
LPC的全局常量,一般都是通过 globals.h 这个文件来完成。这个全局定义文件,将会是所定义的内容在整个Mudlib有效。通过定义 runtime_config.h,可以通过 get_config() 来获得系统的一些基本属性,这些属性都是在config文档中所预先定义的。
Lpc的变量类型不是很多,但是感觉足够用。我们不讨论一些比较偏门的声明,比如status,char这种,大多数的MudOS编译结果,都会淘汰这些。
int,string,array,object,mapping,function,float,buffer,class,void,mixed
int 是最实用的类型之一,在LPmud中,int足可以表示很多数学问题。32位系统中,int的范围是 -2147483648 ~ +2147483648,所以一般房间继承中的 int query_max_encumbrance() { return 100000000000; }
就是 int query_max_encumbrance() { return 2147483648; } 设计Lib的时候,要注意运算不要超过这个范围,否则就是常说的溢出现象了,如果运算结果超过最大值,就会转向相反的方向,负值为正,正值为负。赋值如果超过范围,那么系统自动会取的最大限。一个只有声明没有赋值的整数变量,可以被系统认为是0。因为整数的NULL和0接近。所以,你可以这样做: int i; i++; 
string 是Lpmud的主体定义之一,几乎很多形态都是字符串,尤其是整个世界!头尾加上一个引号,就变成了字符串。比如:string line = "this line"; 如果数值加上引号,也是字符串:"392032"。在字符串中,有一些常用的符号,比如 "\n" 表示一个换行,"\b" 表示一个tab符,这些和标准C没有太大的区别。一个只有声明没有赋值的字符串变量,被系统认为是NULL。字符串变量不会和 0 有关。所以你一旦这样做,就会出错: string i; i += ""; 换个方式,这样做,就可以避免这个错误:string i=""; i += ""; 虽然这段代码毫无意义,但是空的字符串必须通过""来赋值,而不是简单的通过声明。
array 这个关键字的出现,其实我个人认为和MudOS编译有关,最简单的方式就是在变量声明前加上 * ,这是一个方便的方式,当然,如果你觉得会和你的C习惯相冲突的话,那么,使用 array 可以避免困惑。一个数组的定义必须附加上数组成员类型的说明,一般如下: int array x = ({}); 或者 int *x = ({}); 相信,国内大多数设计者更习惯看到后一种定义方式。数组是有排序的,如果数组没有进行过运算,那么它的序列总是不变的,这和你书写的时候有关,比如: int array x= ({1,2}); x[0] 就是 1,x[1]就是2。
mapping 映射,这是别人的翻译,我习惯直接说 mapping,呵呵。这个类型比较奇特,它有数组的一些特性,比如其他语言的关联数组,但是又有一些类的特性。由于ES2使用mapping来作为大量数据的定义,所以这个类型可以说是很多人常见到的。一般的定义可以是这样子的: mapping x = (["a":1,"b":2]); 于是,x["a"]就是1,x["b"]就是2,这很象是关联数组。需要注意的是,映射是没有序列的,虽然你总是可以通过keys() 或者 values()获得一个紧过排序的数组,但是,这个序列和你的书写毫无关系。简单的说来, mapping x=(["a":1,"b",2]); 和 mapping x = (["b":2,"a":1]); 结果是一样的。所以不要试图实用 mapping 序列来访问成员,你必须通过关键字来访问。mapping 成员不需要声明类型,完全根据赋值情况而定。比如上面的例子里,成员都是整型的。
object 物件,毫无疑问,LPC的创造者不断的吸收新的元素来进化LPC,而LPC的物件几乎完美的。你可以在其他语言看到object或者class类的定义,这些和LPC的object非常相似。但是这里,object更为强大。一般的定义是:object ob; 物件的一个特性,就是允许外界通过 call

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms