Lua 学习笔记

课程链接

注释

--注释内容

输出

1
print("Hello World")

声明变量

1
2
a = 1
b = 2

声明的变量默认是全局变量

局部变量的声明方式

1
local a = 1

未被声明的变量为 nil

多重赋值

1
2
3
a,b,c = 1,2

print(a,b,c)

输出结果

1
1	2	nil

number 数值型

十六进制的表示方法(17)

1
a = 0x11

科学计数法的表示方法(20000000000.0)

1
b = 2e10

布尔型

true false

运算符 (来源:菜鸟教程)

算数运算符

操作符 描述 实例
+ 加法 A + B 输出结果 30
- 减法 A - B 输出结果 -10
* 乘法 A * B 输出结果 200
/ 除法 B / A 输出结果 2
% 取余 B % A 输出结果 0
^ 乘幂 A^2 输出结果 100
- 负号 -A 输出结果 -10
// 整除运算符 (>=lua5.3) 5//2 输出结果 2

关系运算符

操作符 描述 实例
== 等于,检测两个值是否相等,相等返回 true,否则返回 false (A == B) 为 false。
~= 不等于,检测两个值是否相等,不相等返回 true,否则返回 false (A ~= B) 为 true。
> 大于,如果左边的值大于右边的值,返回 true,否则返回 false (A> B) 为 false。
< 小于,如果左边的值大于右边的值,返回 false,否则返回 true (A < B) 为 true。
>= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false (A>= B) 返回 false。
<= 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false (A <= B) 返回 true。

逻辑运算符

操作符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 (A and B) 为 false。
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 (A or B) 为 true。
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 not (A and B) 为 true。

其他运算符

操作符 描述 实例
连接两个字符串 a…b ,其中 a 为 "Hello" , b 为 “World”, 输出结果为 “Hello World”。
# 一元运算符,返回字符串或表的长度。 #“Hello” 返回 5

运算符优先级

从高到低的顺序:

1
2
3
4
5
6
7
8
^
not - (unary)
* / %
+ -
..
< > <= >= ~= ==
and
or

除了 ^ 和 … 外所有的二元运算符都是左连接的。

1
2
3
4
5
a+i < b/2+1          <-->       (a+i) < ((b/2)+1)
5+x^2*8 <--> 5+((x^2)*8)
a < y and y <= z <--> (a < y) and (y <= z)
-x^2 <--> -(x^2)
x^y^z <--> x^(y^z)

string 字符串

1
2
3
4
5
6
7
8
9
10
11
a = "string"
b = 'string'
c = "string\n" --支持转义符号
d = [[qfa;env
cadvav
avavaev
]]
print(a)
print(b)
print(c)
print(d)

输出结果

1
2
3
4
5
6
7
8
9
10
string
string
string

qfa;env
cadvav
avavaev



字符串的连接 ..

1
2
3
a = 1
b = 2
print(a..b)

输出结果

1
12

数字与字符串间的转化

数字转字符串 tostring() 字符串转数字 tonumber()

字符串长度

1
2
a = "123456789"
print(#a)

输出结果

1
9

函数

1
2
3
4
function function_name(para1,para2,...)
    -- body
    return a
end

或者

1
2
3
4
function_name = function(para1,para2,...)
    -- body
    return a
end

调用函数

1
function_name(para1,para2,...)

可以有多个返回值

1
2
3
4
5
function f(a, b)
    return a, b
end

print(f(1,2))

输出结果

1
1	2

多个返回值可以配合多重赋值语句

1
2
3
4
5
6
7
8
function f(a,b)
    return a,b
end

local i,j = f(1,2)

print(i)
print(j)

输出结果

1
2
1
2

数组

可以存储数字,字符串,table,function. 用逗号分隔.

table 数字下标

声明方式

1
a = {1,"a",{},function() end}

第一个元素的下标是 1 而不是 0

调用方式

1
print(a[1])

输出结果

1
1

赋值操作

1
2
a[5] = 123
print(a[5])

输出结果

1
123

获取长度

1
print(#a)

输出结果

1
5

插入(将元素 "d" 插入到数组 a 的第 3 个位置)

1
table.insert(a, 3, "d")

移除(将数组 a 的第 3 个元素 "d" 移除)

1
table.remove(a,3)

该操作会返回被移除的值

1
2
r = table.remove(a,3)
print (r)

输出结果

1
d

table 字符串下标

1
2
3
4
5
6
7
a = {
a = 1,
b = "abc",
c = function()

end
}

调用方式

1
print(a["a"])

要将字符串下标用双引号 "" 括起来
输出结果

1
1

如果下标符合变量命名规范的话还能这样调用

1
print(a.a)

输出结果

1
1

如果下标不符合变量命名规范的话要这样

1
2
3
4
b = {
[","] = 123
}
print(b[","])

输出结果

1
123

全局表 _G

_G 一个特殊的 table, 包含所有全局变量

1
2
a = 1
print(_G["a"])

输出结果

1
1

真假判断

1
2
3
4
a = nil --假
b = 0 --真

print(b > 10 and "yes" or "no")

输出结果

1
no

判断

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

输出结果

1
1<10

循环

for

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

输出结果

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

可以修改步长

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

输出结果

1
2
3
4
5
1
3
5
7
9

步长也可以为负数

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

输出结果

1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1

跳出循环 break

while

1
2
3
4
5
local i = 10
while i > 1 do
print(i)
i = i - 1
end

Lua 不支持自增自减操作!!!
输出结果

1
2
3
4
5
6
7
8
9
10
9
8
7
6
5
4
3
2