贫瘠之地

华北无浪漫,死海扬起帆
多少个夜晚,独自望着天

0%

Lua 基本语法

基本语法

变量定义

基本的操作

1
2
3
4
5
a = 1
b = 2
str = "hello world"
print(a + b)
print(str)
多重赋值语句
1
2
3
a,b = 1,2;
print(a)
print(b)
值为 nil

1
2
3
a = nil
print(a) --值为nil
print(b) --值为nil

十六进制与科学计数法

1
2
3
4
a = 0x11
b = 2e10
print(a)
print(b)

数字运算符

Lua 支持加减乘除、幂等多种运算

1
2
3
4
5
6
7
8
9
10
11
12
a = 1
b = 2
print(a+b)
print(a-b)
print(a/b)
print(a*b)
print(b^a)
print(a^b)
print(a==b)
print(a~=b) --lua的不等于符号为"~="
print(a>=b)
print(a<=b)

逻辑运算符与 true、false

注意:0 为 true,nil 为 false

1
2
3
4
5
6
7
a = nil
b = 0
print(a)
print(b)
print(a and b)
print(a or b)
print(not b)

三元表达式

1
2
a = 0
print(a <=0 and "小于等于 0" or "大于 0") --输出"小于等于 0"

字符串

单引号双引号均可

1
2
3
4
a = 'hello world a'
b = "hello world b"
print(a)
print(b)
转义字符
1
2
a = 'hello world\n换行' --\n换行
print(a)
中括号保留原始值(忽略转义)
1
2
a = [['hello world\n换行']]
print(a)
字符串使用 ".." 进行连接

1
2
3
a = 'hello '
b = 'world'
print(a..b)

tostring(param) 与 tonumber(param) 如果tonumber()转换失败则值为nil

1
2
3
4
5
6
7
a = tostring(1000)
b = 'world'
c = tonumber("500")
d = tonumber("str") --值为nil
print(a..b)
print(c)
print(d)

变量前加 '#' 获取字符串长度

1
2
a = "hello world"
print(#a)

函数

函数的基本形式

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

f(1,2)
没有传参的参数值为 nil

1
2
3
4
5
6
7
function f(a,b,c)
print(a)
print(b)
print(c)
end

f(1,2)

可以 return 多个值,多个值可以配合多重赋值语句

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

print(f(1,2))

local aa,bb,cc = f(1,2)
print(aa)
print(bb)
print(cc)

table 结构

table 类似数组,但是可以存数字、字符串、其他 table、函数在一个 table 中 table 下标从 1 开始

1
2
tab = {1,"hello world",{},function() end}
print(tab[1])

下标越界的元素为 nil

1
2
tab = {1,"hello world",{},function() end}
print(tab[10])

指定位置插入元素

1
2
3
tab = {1,"hello world",{},function() end}
tab[10] = 10
print(tab[10])
最后插入元素
1
2
3
tab = {1,"hello world",{},function() end}
table.insert(tab,"no.n")
print(tab[5])
指定位置插入元素
1
2
3
tab = {1,"hello world",{},function() end}
table.insert(tab,3,"no.3")
print(tab[3])
删除元素
1
2
3
4
5
6
7
tab = {1,"hello world",{},function() end}
table.insert(tab,2,"no.2")
print(tab[2])

local del = table.remove(tab,2)
print(tab[2])
print(del)
字符串作为下标 key

1
2
3
4
5
6
7
8
9
10
11
12
13
tab = {
a = 'hello',
b = 'world',
c = 100,
d = {},
e = function() end
}

print(tab.a)
print(tab.b)
print(tab.c)
print(tab.d)
print(tab.e)

特殊符号下标

1
2
3
4
5
6
7
8
9
10
tab = {
a = 'hello'
}

tab["..."] = "...."
tab["abc"] = "abc"

print(tab["..."])
print(tab["abc"])
print(tab.abc)
字符串作为下标可以使用 tab.abc,特殊符号只能通过 tab["..."] 形式指定下标

分支判断

以 if 和 end 为代码块,支持 elseif

1
2
3
4
5
6
7
8
9
10
a = 5
if a==10 then
print("a==10")
elseif a == 9 then
print("a==9")
elseif a>5 then
print("a>5")
elseif a<=5 then
print("a<=5")
end

0 为 true,nil 为 false

1
2
3
4
5
6
7
8
9
10
11
12
13
a = 0
b = nil
if a then
print("0 is true")
else
print("0 is false")
end

if b then
print("nil is true")
else
print("nil is false")
end

循环

起始值为 0,到 10 结束

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

起始值为 10,步长为 -1,到 0 结束

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

循环中 i 的值不能更改(循环所用的值其实是变量 i 的值拷贝)

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

break 语句

1
2
3
4
for i=10,0,-1 do
print(i)
if i == 6 then break end
end

while 语句

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

补充

string.char() 支持十进制、十六进制等

1
2
s = string.char(104,101,108,0x6C,0x6f) --"hello"
print(s)

string.byte() 取出第 n 位字母的十进制

1
2
3
s = string.char(104,101,108,0x6C,0x6f)
n = string.byte(s,2)
print(n)

0x00 在 lua 字符串中不会影响字符串的结束,取值为 0

1
2
3
4
s = string.char(104,101,0x00,108,0x6C,0x6f)
n = string.byte(s,3)
print(n) --"0"
print(#s) --"6"

参考手册

Lua 5.3 参考手册 - 目录 (runoob.com)