Lua文档翻译(中)

来源:互联网 发布:sql语句列名无效 编辑:程序博客网 时间:2024/05/22 07:09

Lua文档翻译(中)

类型

Lua是动态类型语言,不需要人为指明变量类型,脚本解释器会自动判断变量类型。简单的说,给变量赋什么类型的值,变量就变成什么类型。

Lua是动态类型语言,不需要人为指明变量类型,脚本解释器会自动判断变量类型。简单的说,给变量赋什么类型的值,变量就变成什么类型。

Lua是动态类型语言,不需要人为指明变量类型,脚本解释器会自动判断变量类型。简单的说,给变量赋什么类型的值,变量就变成什么类型。

函数type(var)返回变量var的类型名。

注意:不同类型的变量用==比较总是为falsefalse == nil也是false。为避免不易查出的错误,不要比较不同类型的变量。

引用类型

数据表类型(table),函数类型(function),用户定义类型(userdata) 都是引用类型。即他们是对内容的引用,多个引用类型的变量可以引用同一个内容。

例:

    local table1 = {1, 2, 3, 4}

       local table2 = table1             -- table1table2都引用同一个数据表

       table2[2] = 99

       print(table1[2])                     -- table1[2] = 99

如果引用类型没有提供自己的==、~=运算符操作,则执行缺省的比较运算,即判断两引用是否指向同一内容;注意不是比较内容是否一致。

例:

    {} == {}    -- 永远为false,因为创建了两个空数据表,它们不是同一个数据表。 

变量

Lua处理局部变量要比处理全局变量快几倍,所以尽量使用局部变量。在所有函数外部即全局也可声明局部变量,差别是全局变量一直存在,而声明在全局的局部变量只在该模块的生存期存在,并只能被声明它的模块访问。

使用全局变量有难以发现的错误,例:

    g_DeamonCount = 10

       ...

       g_DeamonCuont = 20    -- 拼写错误,ou颠倒了,但不会被脚本解释器发现,

                -- 因为一个新的全局变量被创建了

Lua正在加入global关键字以解决此问题。

读取未赋值的变量也不会报错,所以最好声明变量时赋个缺省值。 

函数嵌套

函数既是可执行的命令,也是可使用的数据,所以函数满足变量的作用域规则,即只在声明它的块内存在,例:

    function foo()

         ...

       end

    do

         function foo()

           ...

         end

         foo()                   -- 调用do...end内的foo()

       end

       foo()               -- 调用全局的foo()

function foo()..end 等同于 local foo = function()...end

一些库函数

dofile(文件名) -- 执行指定文件中的脚本

print(e1, e2, ...) -- 显示变量或常量的值

math.abs(v) -- v的绝对值

math.acos(v), math.asin(v) -- 反余弦,反正弦

math.atan(y/x), math.atan2(y, x) -- 反正切,前者只适用于第一象限,后者可用于所有象限

math.floor(v) -- 取小于等于v的最大整数

math.ceil(v) -- 取大于等于v的最小整数

math.cos(v), math.sin(v), math.tan(v) -- 取余弦,正弦,正切

math.deg(v) -- 弧度变角度

math, rad(v) -- 角度变弧度

math.exp(v) -- ev次幂

math.log(v) -- 取以e为底的对数(自然对数)

math.log10(v) -- 取以10为底的对数

math.pow(x, y) -- xy次幂

math.min(v1, v2, ...), math.max(v1, v2, ...) -- 取最小的,最大的

math.mod(v1, v2) -- v1 / v2的余数

math.sqrt(v) -- v的平方根

math.random() -- 取0到1的随机小数

math.random(upper) -- 取1到upper的随机整数

math.random(lower, upper) -- lowerupper的随机整数

math.randomseed(seed) -- 置随机数种子

写游戏脚本的注意事项

尽量使用本系列文档中提到的用法:Lua本身语法很松,用法很灵活,在看其它文档和样例时会有在此没有提到的语法内容,这些语法内容不是必要的,但却容易导致错误或带来过大的复杂性。例如用(test) and v1 or v2 来模拟C语言的三元表达式,我们不推荐使用。

原创粉丝点击