第二章 Lpc的数据类型。 第一节 序言 Lpc的Object是由零个或更多一些的被一个或一个以上函数操纵 控制的变量组成的。在代码中函数排列的顺序是不影响Object的特 性,但是影响代码的可读性。当你写的那个Object被第一次调用时, Driver将你写的代码装入内存。当每一个Object被调入内存时,所 有的变量是没有值的。create()这个函数被调用来初始化Object的 值。create()这个函数在Object装入内存后立即被调用。在你读本 文时可能对编程一无所知,你可能不知道什么是函数以及它是怎么 调用的;或许你有了一些编程的经验,你可能对一个新创建的Object 的函数相互调用过程是怎样开始感到迷惑。在这些困惑得到解决之 前,你更有必要了解的是这些函数操纵控制的到底是什么东西。所 以你最好先来读读这一章:Lpc的数据类型。可以这么说,几乎90% 的错误(包括丢失{}和())是由于错误的使用Lpc的数据类型。我认 为真正理解这一章能帮助你更容易的编程。 第二节 让计算机理解你 2.1 计算机语言 众所周知的计算机懂得的语言实际上由“0”和“1”组成的机器 码。计算机根本不懂得人类的自然语言,实际上它也不懂得我们使 用的高级语言,比如BASIC,C,C++,Pascal等等。这些高级语言 能让我们更容易的实现我们的想法。但是这些高级语言最终都要被 翻译成“0”和“1”组成的计算机语言。 有两种方法能把高级语言翻译成计算机语言:编译和解释。编译 类的在程序写完之后用一个编译器将其翻译成计算机语言。编译在 程序执行之前就完成了。解释类的翻译的过程在程序执行时进行。 由于解释类的语言程序是边执行边解释,所以一般都要比编译编译 执行的慢。 不管是哪种语言,他们最终都要被翻译成0和1。但是变量,那些 你存在内存里面的变量,却不可能只是0和1。 所以你必须有一种你 使用的那种编程语言里面的方法来告诉计算机这些0和1应该被当做 整数还是字符,或者是字符串,或者别的什么东西。这样就必须使 用到数据类型。 2.2 数据类型 一个简单的例子:你现在有了一个变量,你把它叫做‘x’并且 赋予它一个十进制整数值65。在Lpc你可以这样的语句来做这件事: ------ x = 65; ------ 接着你可以做象下面这样的事: ----- write(x + "\n"); y = x + 5; ----- 第一行把65和字母"a"输出到屏幕上 第二行把70这个值赋于变量y 对计算机来说有个问题:它不知道你所说的 x = 65;中的65什么意思. 你认为是65,但是计算机可能认为是: 00000000000000000000000001000001 但是,对计算机来说,字母'A'也是被当做: 00000000000000000000000001000001 所以,当你想让计算机明白 write( x + "\n" );, 它必须有一种方法 知道你想看到的是65而不是'A'. 计算机就是通过数据类型来区分65和'A'. 一种数据类型简单的说就 是在内存的某处, 那里代表了或者说指向某个给定的变量, 这些内存 储存的数据是什么类型的. 每个LPC的变量都必须有它对应的变量类型. 在上面给的例子, 本应在那些代码之前有下面一行: ----- int x; ---- 这一行告诉Driver x应该指向什么类型的值, 它应该被当做数据类型'int' 来使用. 'int' 是一个32位的整数. 到这里, 你应该有数据类型的基本 印象, 以及为什么必须有数据类型. 他们可以让Driver知道计算机存在 内存里面的'0'和'1'到底是什么东西. 2.3 Lpc的数据类型 所有的LpMud的Driver都会有以下的数据类型: void, int, string, object, mixed, int *, string *, object *, mixed * 大多数的Driver都会有下面这些重要的数据类型: float, mapping, float *, mapping * 有一些Driver同时还支持下面这些数据类型: function, struct, class, char 特别的有MudOS支持的数据类型:(以v22pre8为例) void, int, string, object, float, mapping, function, class, mixed, int *, string *, object *, float *, mapping *, function *, class *, mixed *