1.变量声明

在Lua里只有赋值一个变量就是新建一个变量,如下就声明了两个变量

但Lua声明的变量默认是全局变量(第1行),如果只在当前文件区域用可以加一个local(如第2行)

1
2
a = 1
local b = 2

除此之外,这个赋值语句其实可以给多个变量赋值,格式如下

1
a,b = 1,2

2.nil类型

在lua里没有被声明过的变量都是 nil,nil是一种类型,这种类型只有一个值也就是nil

3.数值类型(number类型)和运算符

  • lua与别的语言不同,数字就只有一个类型就是number

  • 在lua里支持16进制表示方法(0x开头),还支持科学计数法(例如2e10)

  • lua支持加减乘除运算(+,-,^,等等)

  • lua5.3后支持左移右移符合(例如1<<3就是1左移三位,输出8)

  • lua支持各种运算符如>、<、≥、≤、==、~=(不等于)

  • 支持and or not 三个(与或非)

4.字符串

  • lua中用双引号””或者单引号’’来括住字符都可以

同时支持\n这个转移字符(也就是换行)

1
2
3
a = "first line\n second line"
b = 'second line too'
print(a,b)

输出结果如下:

first line

second line second line too

  • 如果需要使用一个多行文本,可以用两个中括号表示,转义字符也不会被转换
1
2
3
4
5
c = [[thefirstline
\nwillnotchange
the third line
]]
print (c)

输出如下:

thefirstline

\nwillnotchange

thethirdline

  • lua中字符串的连接符号是两个点
1
2
3
a = 'abcd'
b = 'efgh'
c = a..b
  • 将数字转化成字符串用到tostring(),字符串转化成数字用tonumber()
1
2
c = tostring(10)
n = tonumber("10")
  • 在字符串前面加上一个#,可以获取这个字符串的长度
1
2
a = "awjdawfawdsa"
print(#a)

5.函数

  • 函数的两种声明方式:
1
2
3
4
5
6
7
function function_name(...)   --function 函数名(参数)
... --函数内容
end --函数结尾

function_name = function(...) --也可以把函数名提前
...
end
  • 函数的调用方式:
1
2
3
4
5
6
function function_name(a,b)
print(a,b)
end

function_name(1,2) --给a,b赋值1,2将其打印出来
--注意如果有三个变量但只赋了两个值,那么没被赋的就输出nil
  • 可以用return来选择返回什么值
1
2
3
4
5
6
function f(a,b)
return a
end

print(f(1,2))
--输出结果就会是1
1
2
3
4
5
6
function f(a,b,c)
return a,b
end
local i,j = f(1,2)
print(i)
print(j)

第二个例子的输出结果为

1

2

6.table

lua里table有两种下标,分为数字下标和字符串下标

  • 数字下标,类似于其他语言的数组,但不同的是这个table可以存数字也可以存字符串,也可以存其他的table或者function,用逗号分开即可
1
2
3
4
a = {1,"ac",{},function() end} 	--用大括号声明
print(a[2]) --输出结果为ac
a[5] = 123 --给a的第五个下标加一个123元素
print(#a) --检测到a的长度为5

​ 和其他语言不同,lua的table里第一个元素下标是1,第二个是2,而不从0开始数

​ 还可以用lua自带的table接口对这个数组进行操作,用table.insert(数组名,下标,插入元素) 插入元素,用table.remove(数组名,下标)来删除

1
2
3
4
a = {1,"ac",{},function() end} 	
a[5] = 123
table.insert(a,2,"d") --在ac前面插入了一个字符d,ac变成了第三个
print(#a) --现在长度为6

​ 值得注意的是,table.remove()在移除的同时会返回这个移除的值

1
2
3
4
a = {1,"ac",{},function() end} 	
a[5] = 123
local s = table.remove(a,2)
print(s) --此时打印结果为ac
  • 字符串下标,有点像python的字典,需要直接把下标写出来,格式如下
1
2
3
4
5
6
7
8
9
10
11
a = {
a = 1
b = "1234"
c = function()

end,
[",;"] = 123 --特殊下标用中括号括起来并且加引号
}

print(a["a"]) --输出结果为1
--也可以这样表示print(a.a),代表打印a中的a下标的元素

可以这样对下标进行赋值

1
2
3
4
5
a = {
a = 1
}
a["abc"] = "abcdefg"
print(a.abc) --打印结果为abcdefg

7.全局表

在lua里有个特殊的table叫做_G,可以用_G来表示这个table,lua里所有的全局变量都在_G这个table里面

8.真和假

lua里有一种类型叫做布尔型,值只有true和false两种

1
2
3
4
5
6
a = true
b = false
print(a and b) --true and false结果是false
print(a or b) --true和任意值进行or操作都是true
print(not a) --not一个true,结果就为false
--输出结果分别为false true false

注意:和其他语言不同,lua里只有false和nil代表假,其他的包括0都代表真

也可以用and和or来实现短路求值:

1
2
3
4
5
a = nil   --假
b = 0 --真
print(b > 10 and "yes" or "no")
--判断b>10就返回yes,否则就返回no
--结果返回了no

9.分支判断

lua里的分支判断语句写法:

1
2
3
4
5
6
7
if 1>10 then
print("1>10")
elseif 1 < 10 then
print("1<10")
else
print("no")
end

10.循环

  • for循环,第一行给变量定义一个初值和一个结束值和步长(步长可以倒序设置成-1),这个变量出了这个代码块就没有意义了,同时for循环中不允许对i值进行修改
1
2
3
4
for i=1,10,2 do    --从1开始到10,步长为2
print(i)
if i == 5 then break end --i值到5结束循环
end
  • while循环,当判断依据满足要求则循环继续,不满足则循环结束
1
2
3
4
5
local n = 10
while n > 1 do
print(n)
n = n - 1
end