Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 339

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 392

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 394
Lua 极简完整教程(全知识点+纯用法) - Joyber 的博客

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("大")
end

2. 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
end

3. while 循环

local i = 1
while i <= 3 do
    print(i)
    i = i + 1
end

4. repeat until 循环

特点:先执行后判断,至少执行一次

local i = 1
repeat
    print(i)
    i = i + 1
until i > 3

5. 循环跳转

-- 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)) -- 5

2. 多返回值

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)
end

2. 字典(键值对)

local dict = {
    name = "Lua",
    age = 20
}
print(dict.name)
print(dict["age"])

-- 增改
dict.version = 5.4
-- 删除
dict.age = nil

3. 混合表 + 遍历

local t = {10,20,name="测试"}

-- 遍历所有键值对(万能遍历)
for k,v in pairs(t) do
    print(k,v)
end

4. 常用表操作

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()

lua进阶版

标签: none

添加新评论