基础语法速记

  • 单行注释 --
  • 多行注释 —[[]]—
  • 数据类型,nil、boolean、number、string、、table、function、userdata和thread
  • 不等于,~=
  • 逻辑运算符,and,or,not

分支结构

if else 分支结构

1
2
3
4
5
6
7
8
9
10
11
score = 60

if (score >= 80) then
4print("优秀")
elseif (score >= 70) then
4print("良好")
elseif (score >= 60) then
4print("及格")
else
4print("不及格")
end

Tips

  1. if 后面都有一个 then
  2. elseif 之间没有空格

循环结构

for 循环

1
2
3
for i=0, 10, 1 do
4print(i)
end

Tips

  1. 用逗号(,)
  2. 条件判断,小于等于10
  3. Lua 只有 break,没有 continue

While 循环

当条件满足时,执行循环

1
2
3
4
5
temp = 10
while (temp > 0) do
4print("temp"..temp)
4temp = temp - 1
end

repeat 循环

执行循环,直到条件满足

1
2
3
4
5
num = 10
repeat
4print(num)
4num = num -1
until(num==0)

数组

定义

1
2
myArray1 = {}
myArray2 = {"a", 123, nil, true}

Tips

  1. 长度不固定
  2. 数据类型不限制
  3. 下标从1开始

获取长度
table.getn(myArray2)

字符串

定义

1
name = "Zak"

详见lua-字符串操作

函数

定义

1
2
3
4
function (parm) 
4print(parm)
4return parm -- 返回值
end

Tips

  1. 先声明后调用
  2. 函数可以作为函数参数

表 table

表的创建

1
2
3
-- 表名 = {}
myTable = {}
myTable = {1, 2, 3, "a", true}

表的赋值

两种方式:数组形式赋值,键值对形式赋值
  1. 以数组的形式赋值(就是数组)
1
2
3
4
5
6
7
8
myTable = {}
myTable[1] = "1"
myTable[2] = "2"
myTable[3] = "3"

for index, value in ipairs(myTable) do
print(index, value)
end
  • 下标从 1 开始
  • 下标必须连续的
  1. 以键值对的形式赋值
1
2
3
4
5
6
7
8
myTable = {}
myTable["r"] = "Red"
myTable["g"] = "Green"
myTable["b"] = "Blue"

for key, value in pairs(myTable) do
print(key, value)
end
  • ipairs 用于遍历数组,pairs 用于遍历数组或表,数组是表的一种

模块

模块定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- MyMath.lua   -- 脚本的名称要和模块的名称一样
MyMath = {} -- 定义模块

MyMath.PI = 3.1415 -- 定义常量

function MyMath.Add(first, second) -- 定义公开方法
return first+second
end

local function fun() -- 定义私有方法
print("这是私有方法")
end

return MyMath -- 结束模块

模块使用

1
2
3
4
5
require("MyMath")   -- 加载模块
print(MyMath.Add(MyMath.PI, 10))

myMath = require("MyMath") -- 加载模块,别名使用
print(myMath.Add(1, 2))

元表

1
2
3
4
5
6
7
8
9
10
11
tableA = {Province = "GuangDong", City = "Guangzhou"}	-- 表A
tableB = {Block = "TianHe", Road = "JiShanLu"} -- 表B

setmetatable(tableA, tableB) -- 设置表B为表A的元表

getmetatable(tableA) -- 获取表的元表,返回元表,nil表示没有包含元表
print(getmetatable(tableA))

tableB.__index = tableB -- 设置元表的索引

print(tableA.Province, tableA.City, tableA.Block, tableA.Road)