Lua学习--随手记,会逐步完善
数据类型
nil -> 表示无效值,在条件表达式中相当于false
boolean
number -> 表示双精度类型的实浮点数
string
function -> C或者Lua编写的函数
table -> 是一个关联数组,类似于Map,通过“构造表达式”完成,最简单的是 { }
userdata -> 表示任意存储在变量中 的 C数据结构
thread -> 类似于线程
table ( 表 )
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存
【例】
a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
print(k .. " : " .. v)
end
运行结果为:
key : value
10 : 33
在 Lua 里表的默认初始索引一般以== 1 ==开始。
table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
循环
while 循环
a=1
while(a<=20) do
if a%2 ==0 then
print(a)
end
a=a+1
end
For 循环
普通for循环
for i=val1,val2,val3 doXXXXX
end
-- i 从val1变化到val2,每次以val3的步长递增,如果不指定val3,则默认步长为1
泛形for循环
泛型 for 循环通过一个迭代器函数来遍历所有值,类似 foreach 语句。
Lua 编程语言中泛型 for 循环语法格式:
tab={key1="ab",key2="kl"}
for k,v in pairs(tab) do
print(k..":"..v)
end
for k,v in pairs(tab1) do
print(k,v)
end
Repeat - until 循环(与do while)
repeat
循环体
until( 条件)
循环控制语句
有了 goto,我们可以实现 continue 的功能:
for i=1, 3 do
if i <= 2 then
print(i, "yes continue")
goto continue
end
print(i, " no continue")
::continue::
print([[i'm end]])
end
-- 输出结果为:
1 yes continue
i'm end
2 yes continue
i'm end
3 no continue
i'm end
流程控制
if(布尔表达式) then--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
文件IO
打开文件操作语句如下:
file = io.open (filename , mode)
mode 的值有:
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
r+ 以可读写方式打开文件,该文件必须存在。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+ 与a类似,但此文件可读可写
b 二进制模式,如果文件是二进制文件,可以加上b
+ 号表示对文件既可以读也可以写
【例】
--- 要提前建立好test文件
-- 以只读方式打开文件
file = io.open("test", "r")
-- 设置默认输入文件为 test
io.input(file)
-- 输出文件第一行
print(io.read())
-- 关闭打开的文件
io.close(file)
-- 以附加的方式打开只写文件
file = io.open("test", "a")
-- 设置默认输出文件为 test.lua
io.output(file)
-- 在文件最后一行添加 Lua 注释
io.write("-- test 文件末尾注释")
-- 关闭打开的文件
io.close(file)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?