Lua 极简完整教程(全知识点+纯用法)
Lua 极简完整教程(全知识点+纯用法)
说明:全文无冗余描述,每项只写:作用 + 标准代码写法,可直接复制运行。覆盖Lua入门到进阶全部核心知识点。
一、基础语法规则
1. 注释
作用:代码备注,不执行
-- 单行注释
--[[
多行注释
多行注释
]]2. 语句规则
作用:代码书写规范
- Lua 可省略分号,不报错
- 大小写敏感:a 和 A 是两个变量
- 标识符:字母/下划线开头,后跟字母、数字、下划线
3. 打印输出
作用:控制台打印内容
print("Hello Lua")
print(123, true, nil)二、八大数据类型
作用:Lua所有数据仅有8种类型,type()查看类型
-- 1. nil 空值(默认未赋值变量)
local a = nil
-- 2. boolean 布尔
local b = true
local c = false
-- 3. number 数字(整数/小数统一类型)
local d = 100
local e = 3.14
-- 4. string 字符串
local str1 = "双引号字符串"
local str2 = '单引号字符串'
local str3 = [[
多行
字符串
]]
-- 5. table 表(数组+字典,Lua唯一容器)
local t = {}
-- 6. function 函数
local f = function() end
-- 7. userdata 自定义C数据(极少用)
-- 8. thread 协程线程
-- 查看类型
print(type(a)) -- nil
print(type(str1)) -- string三、变量(全局/局部)
作用:存储数据,局部变量优先使用(效率高、不污染全局)
-- 全局变量:任意位置访问,默认全局
g_num = 100
-- 局部变量:仅当前代码块有效,local声明
local l_num = 200
-- 多变量赋值
local x, y, z = 1, 2, 3
-- 变量默认值 nil
local empty
print(empty) -- nil四、运算符
1. 算术运算符
local a = 10
local b = 3
print(a + b) -- 加
print(a - b) -- 减
print(a * b) -- 乘
print(a / b) -- 除(浮点)
print(a % b) -- 取余
print(a ^ b) -- 幂运算
print(-a) -- 负号2. 关系运算符
返回 true/false
print(10 == 10) -- 等于
print(10 ~= 3) -- 不等于(Lua独有 ~=)
print(10 > 3) -- 大于
print(10 < 3) -- 小于
print(10 >= 3) -- 大于等于
print(10 <= 3) -- 小于等于3. 逻辑运算符
Lua逻辑:and / or / not,无\&\& || \!
print(true and false) -- 与
print(true or false) -- 或
print(not true) -- 非
-- 短路特性(常用赋值技巧)
local n = nil
local res = n or 100 -- n为空则取100(默认值赋值)4. 字符串拼接
符号:..
local s = "Lua" .. "学习"
print(s) -- Lua学习五、流程控制
1. if 条件判断
-- 单分支
local a = 10
if a > 5 then
print("大于5")
end
-- 双分支
if a > 20 then
print("大")
else
print("小")
end
-- 多分支
if a < 5 then
print("小")
elseif a < 15 then
print("中")
else
print("大")
end2. for 循环
-- 数值for:起始,结束,步长(步长默认1)
for i=1,5 do
print(i) -- 1 2 3 4 5
end
for i=1,10,2 do
print(i) -- 1 3 5 7 9
end3. while 循环
local i = 1
while i <= 3 do
print(i)
i = i + 1
end4. repeat until 循环
特点:先执行后判断,至少执行一次
local i = 1
repeat
print(i)
i = i + 1
until i > 35. 循环跳转
-- break:跳出当前循环
for i=1,10 do
if i == 3 then
break
end
print(i)
end
-- Lua 无 continue,可通过 if 模拟六、函数(核心)
作用:封装代码,复用逻辑,支持多返回值
1. 基础函数
-- 定义
local function add(a,b)
return a + b
end
-- 调用
print(add(2,3)) -- 52. 多返回值
local function getPos()
return 10, 20
end
local x,y = getPos()
print(x,y)3. 可变参数
作用:接收任意多个参数
local function sum(...)
local res = 0
for _,v in ipairs({...}) do
res = res + v
end
return res
end
print(sum(1,2,3,4))4. 匿名函数
local f = function(a,b)
return a*b
end
print(f(2,5))七、Table 表(Lua万能容器)
作用:唯一的数据容器,可当数组、字典、对象、结构体使用
1. 数组(有序列表,默认下标从1开始)
local arr = {"a","b","c"}
print(arr[1]) -- a
-- 遍历数组
for i,v in ipairs(arr) do
print(i,v)
end2. 字典(键值对)
local dict = {
name = "Lua",
age = 20
}
print(dict.name)
print(dict["age"])
-- 增改
dict.version = 5.4
-- 删除
dict.age = nil3. 混合表 + 遍历
local t = {10,20,name="测试"}
-- 遍历所有键值对(万能遍历)
for k,v in pairs(t) do
print(k,v)
end4. 常用表操作
local arr = {1,2,3}
table.insert(arr,4) -- 尾部插入
table.insert(arr,2,99) -- 指定下标插入
table.remove(arr,2) -- 删除指定下标
print(#arr) -- # 获取数组长度八、字符串常用操作
local s = "LuaStudy"
print(#s) -- 字符串长度
print(string.upper(s)) -- 转大写
print(string.lower(s)) -- 转小写
print(string.find(s,"Lua"))-- 查找子串位置
print(string.sub(s,1,3)) -- 截取 1-3位
print(string.rep(s,2)) -- 重复2次
print(string.gsub(s,"Lua","Go")) -- 替换九、迭代器遍历
- ipairs:只遍历数字下标、连续数组,从1开始
- pairs:遍历所有键值对(数组、字典全部遍历)
local t = {11,22,name="test"}
for i,v in ipairs(t) do print(i,v) end
for k,v in pairs(t) do print(k,v) end十、作用域
作用:区分变量生效范围
local a = 10 -- 全局局部(文件级)
if true then
local a = 20 -- 代码块局部,仅内部生效
print(a) -- 20
end
print(a) -- 10十一、异常处理
作用:捕获代码错误,防止程序崩溃
local ok, err = pcall(function()
-- 可能报错的代码
print(1/0)
end)
if not ok then
print("错误:",err)
end十二、模块与require
作用:引入外部lua文件,代码模块化
-- 引入同目录模块
local m = require("test")
-- 卸载模块
package.loaded["test"] = nil十三、协程(Lua核心特性)
作用:轻量级线程,可暂停、恢复执行
-- 创建协程
local co = coroutine.create(function()
print("协程执行")
coroutine.yield() -- 暂停
print("协程恢复")
end)
coroutine.resume(co) -- 启动
coroutine.resume(co) -- 恢复十四、常用系统工具
-- 随机数
math.randomseed(os.time()) -- 随机种子
print(math.random(1,10))
-- 数学函数
print(math.floor(3.9)) -- 向下取整
print(math.ceil(3.1)) -- 向上取整
print(math.max(1,9))
-- 获取当前时间
print(os.time())十五、元表与元方法(进阶)
作用:给table添加重载行为、自定义操作
local t1 = {1,2}
local mt = {
__add = function(a,b)
return {a[1]+b[1], a[2]+b[2]}
end
}
setmetatable(t1,mt)
local t2 = {3,4}
local res = t1 + t2 -- 重载加法
print(res[1],res[2])十六、面向对象(Lua模拟)
作用:用table+元表实现类与继承
-- 定义类
local Person = {}
Person.__index = Person
-- 构造方法
function Person.new(name,age)
local self = setmetatable({},Person)
self.name = name
self.age = age
return self
end
-- 成员方法
function Person:say()
print(self.name,self.age)
end
-- 实例化
local p = Person.new("小明",18)
p:say()十七、文件IO
-- 写文件
local f = io.open("test.txt","w")
f:write("测试内容")
f:close()
-- 读文件
local f = io.open("test.txt","r")
local str = f:read("*a")
print(str)
f:close()版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1529.html
转载时须注明出处及本声明