HoRain云--Lua函数全解析

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

Lua 的函数是一等公民(First-Class):
👉 可以赋值、传参、作为返回值、动态创建。
这是 Lua 最强大、最核心的特性之一。
一、函数定义方式
✅ 标准写法
function add(a, b)
return a + b
end
✅ 变量式定义(本质)
add = function(a, b)
return a + b
end
✅ 函数本质是匿名函数赋值给变量
二、函数调用
print(add(3, 5))
✅ 括号可省略(仅一个参数):
print "Hello"
三、参数规则(非常重要)
1️⃣ 参数数量不强制
function f(a, b)
print(a, b)
end
f(1) --> 1 nil
f(1, 2, 3) --> 1 2
✅ Lua 自动补 nil
❌ 不会报错
2️⃣ 多返回值(Lua 特色 🔥)
function swap(a, b)
return b, a
end
x, y = swap(1, 2)
✅ 可接收任意数量:
a, b, c = 1, 2
3️⃣ 变长参数(...)
function sum(...)
local total = 0
for _, v in ipairs{...} do
total = total + v
end
return total
end
print(sum(1, 2, 3, 4)) --> 10
四、函数作用域 & 局部函数
✅ 全局函数(⚠️ 不推荐)
function foo()
end
✅ 局部函数(✅ 推荐)
local function foo()
end
⚠️ 递归函数必须这样写:
local function fact(n)
if n == 1 then return 1 end
return n * fact(n - 1)
end
五、闭包(Lua 的灵魂 🔥)
function counter()
local i = 0
return function()
i = i + 1
return i
end
end
c = counter()
print(c()) --> 1
print(c()) --> 2
✅ 函数记住了它的词法环境
六、函数作为参数(回调)
function run(fn)
fn()
end
run(function()
print("Hello")
end)
✅ 常用于:
-
游戏事件
-
定时器
-
异步回调
七、尾调用(Tail Call)
function f(n)
return g(n)
end
✅ 不会增加调用栈
✅ Lua 会自动优化(尾递归安全)
八、函数常见陷阱 ⚠️
|
坑 |
说明 |
|---|---|
|
默认全局 |
忘记 |
|
多返回值截断 |
只在表达式末尾保留 |
|
参数无类型 |
需手动检查 |
|
无重载 |
后定义覆盖前定义 |
九、实用技巧 ✅
1️⃣ 参数默认值
function say(name)
name = name or "Guest"
print("Hello " .. name)
end
2️⃣ 解包 table
t = {1, 2, 3}
print(table.unpack(t))
十、一句话总结
Lua 函数 = 值 + 闭包 + 多返回值 + 一等公民
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐


所有评论(0)