LUA脚本文档中文翻译(基础)

LUA脚本文档中文翻译(基础)

 

介绍

 

Lua读作鹿啊,是一种据创作者说的类Pascal脚本语言。巴西人做的,其名字"lua"是西班牙语的月亮。Lua是目前在游戏工业中用得最多的脚本语言。优点是执行速度快。

 

基本概念

 

一段脚本就是一组命令和数据。

命令的术语叫作语句,一段语句可以用do ... end括起来构成一个语句块。语句块是一个相对独立的块,逻辑上等同于一条语句。

 

脚本中两个减号--后面到行末的内容为注释,脚本解释器会忽略它们。

多行注释为-- [[打头直到匹配的]]

 

标识符是字母或下划线打头由字母、下划线和数字组成的标识,用作变量名或函数名。

 

下文中标**的内容不必要掌握。

 

数据

 

数据分不同的类型。Lua支持的类型有:

    nil:空类型,即没有数据

    boolean:布尔类型,即真(true)或假(false)

    number:数值类型,如123,24.5,1.23e-12 (即1.23乘10的-12次方)

    string:字符串,即一段文字

    table:数据表类型,即键-值数据对的集合

    function:函数,即一段命令,在脚本中命令也可作为数据操作

    userdata:用户数据,扩展的数据类型 **

    thread:线程类型 **

 

保存数据的东西叫变量。变量分全局变量和局部变量。全局变量一直存在,局部变量只执行到它所在的局部才存在。应该尽量使用局部变量,以避免逻辑错误。

 

例:

    local x = 10        -- 局部变量x保存数值10

    local title = "你好" -- 局部变量title保存字符串"你好"

    local dead = true   -- 局部变量dead保存真

 

    x = 10                -- 全局变量x保存10

    do                    -- 语句块

      local x = x         -- 局部变量x被赋予全局变量x的值,只在块内存在

      print(x)            --> 显示10

      x = x+1

      do                  -- 又一个内部语句块

           local x = x+1     -- 又一个局部变量只在该块内存在

        print(x)          --> 显示12

      end

      print(x)            --> 显示11

    end

    print(x)              --> 显示10  全局变量x的值

 

字符串

 

字符串数据使用引号括起来以区别于其他符号,注意是英文引号。如:

    "Hello, world!"

字符串中,用/"表示引号,用/'表示单引号,用//表示/,用/n表示换行。

 

表达式

 

表达式就是算式概念的扩展。

 

数学表达式的运算符有 +, -, * (乘), / (除), ^ (指数),- (负号)

如果操作数是字符串类型,并可以被转换成数值,则将自动转换成数值

 

关系运算符返回布尔值true或false,有:== (等于),~= (不等于),< (小于),> (大于),<= (小于等于),>= (大于等于)

注意,对数值类型不要用==比较,应判断两数的差是否小于一个足够小的数,否则对有些数看起来相等却不相等。0 除外。

 

逻辑运算符包括:and (和,并且), or (或者),not (非,不)

逻辑运算的操作数一定要是布尔类型或nil,nil表示空,被当作false处理。使用其他类型的操作数不会报错,因为有其特定的功能,但坚决不推荐使用。

 

字符串连接运算符:.. (取得两个字符串连接后的字符串)

如果操作数是数值型,则自动转换为字符串

 

优先级,从底到高:

       or

       and

       <     >     <=    >=    ~=    ==

       ..

       +     -

       *     /

       not   - (负号)

       ^

..和^是右结合,就是说 2^2^3 == 2^(2^3)。

 

例:

    hp < 10 and not player.frozen -- hp小于10 并且 玩家没有被冰冻 时为真

 

流程控制语句

 

while 表达式 do

  语句块

end

如果表达式的结果为true,则执行语句块,到end后返回while再循环。如果表达式的结果为false,则跳过语句块执行end后的语句。

 

repeat

  语句块

until 表达式

先执行语句块,再判断表达式是否为true,是则继续向下执行,否则返回repeat重复。

 

循环内可用break语句跳出包含该break的一层循环。

 

if 表达式 then

  语句块

else

  语句块

end

 

if 表达式 then

  语句块

elseif 表达式 then

  语句块

else

  语句块

end

根据表达式的结构选择执行。

 

for 循环变量 = 初值, 终值 do

  语句块

end

 

for 循环变量 = 初值, 终值,每次的增量 do

  语句块

end

绝对不要在for语句块中修改循环变量。

 

函数

 

函数即可被重复调用的语句块。

 

function 函数名(参数列表)

  语句块

end

 

参数列表为用逗号分隔的变量名列表,当执行到函数体内部时,他们就是函数体内的局部变量,并且已用调用时指定的实参赋值。参数列表可以为空。

 

函数可以返回值给调用者,使用 

    return 返回值

执行return之后将从函数返回调用者的下一条语句继续执行。

 

例:

function max(a, b)

  if a > b then

    return a

  else

    return b

end

 

local c = max(10, 20)   -- c == 20

 

调用函数时使用

    函数名(参数列表) 或 函数名()

注意括号必须加上,这样才表示函数调用,执行函数内的语句。

如果不加则表示一个函数类型的值。*

 

当需要返回多个值时,使用

    return 返回值1,返回值2,...

调用时用多个变量接收返回值,例:

    local v1, v2, v3

    v1, v2, v3 = a_multi_return_value_funtion()

注意尽量不要使用多返回值,因为脚本解释器不检查变量的个数是否匹配,多则丢弃,少则置nil,容易倒致错误而不易发现。

 

数据表

 

数据表是脚本系统的核心数据结构,本质上是从键到值的映射。其它的数据结构都由数据表表示。

如数组,以从1开始的整数为键索引:

    local arr = {10, 100, 1000} -- arr[1] = 10, arr[2] = 100, arr[3] = 1000

词典,以字符串索引:

    local dict = {"pig" = "猪", "dog" = "狗"} -- dict["pig"] = "猪" ……

对象,以属性(即对对象的描述)名索引:

    local pig = {legs = 4, tail = 1, name = "猪"} -- pig.legs = 4 ……

作为对象使用时,字符串作键、函数作值即表示对象的方法(即对对象的操作),调用方法的例子:

    deamon.attack(deamon, target, strength)

也可简写为

    deamon:attack(target, strength)

即是说因为第一个参数也是数据表,所以将点换成冒号并省掉第一个参数。

 

使用数据表的for语句

 

for 循环变量i, 循环变量v in ipairs(数据表t) do

  语句块

end

i是整数键,v是值

循环将逐次得到 (i = 1, v = t[1]), (i = 2, v = t[2]), ……

 

for 循环变量k, 循环变量v in pairs(数据表t) do

  语句块

end

k是键,v是值

循环将逐次得到数据表中的每一个键-值对。

 

绝对不要在for语句块中修改循环变量。

 

常用函数

 

assert(v [, message]) -- 用于调试,断言v一定为true,否则说明有逻辑错误,中断运行并显示message的内容。

 

tostring(e) -- 将e转换成字符串

 

tonumber(e [, base])-- 将e转换成数值,如果指定base,则按指定的进制转换

 

next(table [, index]) -- 取数据表中index的下一个索引键;如果省略index则返回第一个;如果index为最后一个则返回nil。

 

error(message [, level]) -- 终止执行并给出错误信息

 

数据表函数

 

table.sort(table [, comp]) -- 将数据表元素按值排序。如果指定comp比较函数,则使用comp函数进行比较。comp应有两个参数,当a<b时返回true。

 

table.insert(table, [pos,] value) -- 在table的pos索引位置插入value。

 

table.remove(table [, pos]) -- 删除table中索引为pos的元素,省略pos时为最后一个元素。

 

table.foreachi(table, f) -- 对table中每一个值,调用f函数,参数为整数索引和元素值

 

table.foreach(table, f) -- 对table中每一个值,调用f函数,参数为键和值

 

数学库函数

 

       math.abs     math.acos    math.asin    math.atan    math.atan2

       math.ceil    math.cos     math.deg     math.exp     math.floor

       math.log     math.log10   math.max     math.min     math.mod

       math.pow     math.rad     math.sin     math.sqrt    math.tan

       math.frexp   math.ldexp   math.random  math.randomseed

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
lua中文教程,原名:programming in lua 目录 版权声明..............i 译序..i 目录iii 第一篇语言.......1 第0章序言.......1 0.1 序言..........1 0.2 Lua的使用者................2 0.3 Lua的相关资源............3 0.4 本书的体例.................3 0.5 关于本书...3 0.6 感谢..........4 第1章起点.......5 1.1 Chunks.......5 1.2 全局变量...7 1.3 词法约定...7 1.4 命令行方式.................7 第2章类型和值9 2.1 Nil..............9 2.2 Booleans....9 2.3 Numbers...10 2.4 Strings......10 2.5 Functions.12 2.6 Userdata and Threads.12 第3章表达式..13 3.1 算术运算符...............13 3.2 关系运算符...............13 3.3 逻辑运算符...............13 3.4 连接运算符...............14 3.5 优先级.....15 3.6表的构造..15 第4章基本语法................18 4.1 赋值语句.18 4.2 局部变量与代码块(block)......19 4.3 控制结构语句...........20 Programming in Lua iv Copyright ® 2005, Translation Team, www.luachina.net 4.4 break和return语句......23 第5章函数......24 5.1 返回多个结果值.......25 5.2可变参数..27 5.3 命名参数.28 第6章再论函数................30 6.1 闭包........32 6.2 非全局函数...............34 6.3 正确的尾调用(Proper Tail Calls)...36 第7章迭代器与泛型for....40 7.1 迭代器与闭包...........40 7.2 范性for的语义...........42 7.3 无状态的迭代器.......43 7.4 多状态的迭代器.......44 7.5 真正的迭代器...........45 第8章编译·运行·调试47 8.1 require函数.................49 8.2 C Packages.................50 8.3 错误........51 8.4 异常和错误处理.......52 8.5 错误信息和回跟踪(Tracebacks)....53 第9章协同程序................56 9.1 协同的基础...............56 9.2 管道和过滤器...........58 9.3 用作迭代器的协同...61 9.4 非抢占式多线程.......63 第10章完整示例..............68 10.1 Lua作为数据描述语言使用........68 10.2 马尔可夫链算法.....71 第二篇 tables与objects........75 第11章数据结构..............76 11.1 数组......76 11.2 阵和多维数组.........77 11.3 链表......78 11.4 队列和双端队列.....78 11.5 集合和包.................80 11.6 字符串缓冲.............80 第12章数据文件与持久化..................84 12.1 序列化...86 Programming in Lua v Copyright ® 2005, Translation Team, www.luachina.net 第13章 Metatables and Metamethods...92 13.1 算术运算的Metamethods............92 13.2 关系运算的Metamethods............95 13.3 库定义的Metamethods................96 13.4 表相关的Metamethods................97 第14章环境..103 14.1 使用动态名字访问全局变量...103 14.2声明全局变量........104 14.3 非全局的环境.......106 第15章 Packages.............109 15.1 基本方法...............109 15.2 私有成员(Privacy)................111 15.3 包与文件................112 15.4 使用全局表............113 15.5 其他一些技巧(Other Facilities)...115 第16章面向对象程序设计.................118 16.1 类.........119 16.2 继承.....121 16.3 多重继承...............122 16.4 私有性(privacy)...................125 16.5 Single-Method的对象实现方法127 第17章 Weak表...............128 17.1 记忆函数...............130 17.2 关联对象属性.......131 17.3 重述带有默认值的表...............132 第三篇标准库134 第18章数学库................135 第19章 Table库...............136 19.1数组大小................136 19.2 插入/删除..............137 19.3 排序.....137 第20章 String库..............140 20.1 模式匹配函数.......141 20.2 模式.....143 20.3 捕获(Captures).146 20.4 转换的技巧(Tricks of the Trade)151 第21章 IO库..157 21.1 简单I/O模式..........157 21.2 完全I/O 模式........160 Programming in Lua vi Copyright ® 2005, Translation Team, www.luachina.net 第22章操作系统库........165 22.1 Date和Time............165 22.2 其它的系统调用...167 第23章 Debug库..............169 23.1 自省(Introspective)..............169 23.2 Hooks...173 23.3 Profiles.174 第四篇 C API..177 第24章 C API纵览..........178 24.1 第一个示例程序...179 24.2 堆栈.....181 24.3 C API的错误处理..186 第25章扩展你的程序....188 25.1 表操作.189 25.2 调用Lua函数.........193 25.3 通用的函数调用...195 第26章调用C函数..........198 26.1 C 函数..198 26.2 C 函数库................200 第27章撰写C函数的技巧..................203 27.1 数组操作...............203 27.2 字符串处理...........204 27.3 在C函数中保存状态.................207 第28章 User-Defined Types in C........212 28.1 Userdata.................212 28.2 Metatables..............215 28.3 访问面向对象的数据...............217 28.4 访问数组...............219 28.5 Light Userdata........220 第29章资源管理............222 29.1 目录迭代器...........222 29.2 XML解析...............225
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值