Lua 学习笔记

最近不知道发什么神经,突然想起 Lua 来了,没错就是发神经,就是我又不是写脚本,又不是写mod啥的,无端端就想起来这门语言了,所以这次就来写个快速入门的教程吧。这次是 Windows 环境下使用 VSCode 进行编写,Linux 和 Mac 其实也差不多

配置 Lua

首先先把 Lua 的环境配置好

下载 Lua

首先到浏览器中打开 Lua 官网 (https://www.lua.org/)

然后点击 get started

然后点击在 Installing 下面的 LuaDist

然后下载自己需要的版本

然后解压

解压完以后将 bin 配置到环境变量当中,这一步我就不讲了

配置完环境变量后打开 cmd ,如果是 Linux 或者 Mac 就打开 Terminal ,然后输入 lua -v 查看版本信息,检查是否安装成功

也可以输入 lua -i 直接进入控制台

vscode 配置

安装以下插件

编写代码

接下就是快速入门 Lua 的代码编写

hello world

程序员的第一步

1
print('hello')

变量

1
2
a = 123
b = '123'

Lua 的变量默认是全局变量,所以想要用局部变量可以在变量名前加上 local

1
2
local a = 123
local b = '123'

注释

注释用 --

1
-- 注释

数据类型

number

所有的数字都是 number 类型,比如下面的

1
2
3
4
a = 123		-- 整数
b = 123.3 -- 小数
c = 0x123 -- 十六进制
e = 1e34 -- 科学计数法

布尔

Lua 也有布尔类型

1
2
a = true
b = false

在 Lua 中只有 falsenil 表示 false 其余都是 true 包括 0

nil

空,没有就是空,虽然是废话

1
a = nil

运算

跟其他编程语言差不多

1
2
3
4
5
a = 1 + 2
b = 2 * 3
c = 5 % 2
d = 1 << 2
e = 1 == 2

下面这些跟其他语言可能不太一样

1
2
3
4
a = 5 / 2	-- 除尽
b = 5 // 2 -- 整除
c = 2 ^ 3 -- 乘幂
d = 1 ~= 2 -- 不等于

与或非

Lua 中的与或非跟 Python 类似

1
2
3
a = true and false
b = true or false
c = not true

与或非并不是只输出 true 或者 false,还可以输出原本的值,这跟 JavaScript 类似

1
2
a = 1 or 2	-- 输出 1
b = 1 and 2 -- 输出 2

字符串

单引号和双引号都表示字符串

1
2
a = "hello"
b = 'world'

Lua 也有转义字符,比如

1
a = "abc\nefg"

多行文本可以用 [[]] 来表示

1
2
3
4
5
a = [[
123
456
789
]]

字符串拼接,在 Lua 中是用 .. 来表示

1
2
3
a = "hello"
b = "world"
c = a..b

字符串和数字键互相转换,可以用 tostringtonumber

1
2
3
a = 123
b = tostring(a)
c = tonumber(b)

提醒一句如果 tonumber 转换失败的话是会变成 nil

1
2
a = "abc"
b = tonumber(a)

获取字符串长度可以在前面加上 #

1
2
a = "abcdefg"
b = #a

控制流程

判断

判断使用 if ... then ... end

1
2
3
4
5
a = 1
b = 2
if a > b then
print('a > b')
end

如果否则 if ... then ... else ... end

1
2
3
4
5
if a > b then
print('a > b')
else
print('a < b')
end

多种不同的判断 if ... then ... elseif ... then ... else ... end

1
2
3
4
5
6
7
8
9
if a > b then
print('a > b')
elseif a < b then
print('a < b')
elseif a == b then
print('a == b')
else
print('error')
end

循环

for

for 循环跟 Python 差不多,但不完全一样,它有初值和结束值,比如输出 1 到 9

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

或者再加上第三个参数,步长,下面是输出 10 以内奇数

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

满足 while 后面的表达式是循环

1
2
3
4
5
i = 0
while i < 10 do
print(i)
i = i + 1
end
repeat … until

满足 until 后面的表达式时停止

1
2
3
4
5
i = 0
repeat
print(i)
i = i + 1
until i < 10
break

退出循环

1
2
3
4
for i = 1, 9 do
print(i)
if i == 5 then break end
end

数组

数组使用 {} 包含

1
2
a = {1,2,3,4,5}
b = {'1','2','3','4','5'}

Lua 的数组不仅可以包含同类型还可以包含不同类型

1
a = {1,'2',{},function() end}

需要注意的是,Lua 的下标从 1 开始而不是 0

除此以外,还可以通过键值对来存储数组

1
2
3
4
5
t = {
a = 1,
b = 2,
c = 3
}

如果要获取数组的长度也同样是同 #

1
2
a = {1,'2',{},function() end}
b = #a

可以通过下标改变数值

1
2
a = {1,2,3,4}
a[2] = 3

如果是键值对存储的话可以这样

1
t['a'] = 2

或者这样也是可以访问的

1
print(t.a)

也可以用 table.insert 来在尾部插入元素

1
2
a = {1,2,3,4}
table.insert(a,5)

按下标进行中间插入

1
2
a = {'1','2','4','5'}
table.insert(a,3,'3')

删除元素

1
2
a = {'1','2','2','3'}
table.remove(a,2)

函数

声明

函数的声明是用 function ... end 比如

1
2
3
function funcName()
-- code
end

也可以是这样

1
2
3
funcName = function()
-- code
end

入参

1
2
3
function funcName(a, b)
-- code
end

返回

1
2
3
4
function funcName(a, b)
-- code
return a,b
end

调用

1
2
3
4
5
function A()
-- code
end

A()

好了差不多了,更多的用法可以用到再查