🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、函数定义方式

✅ 标准写法

✅ 变量式定义(本质)

二、函数调用

三、参数规则(非常重要)

1️⃣ 参数数量不强制

2️⃣ 多返回值(Lua 特色 🔥)

3️⃣ 变长参数(...)

四、函数作用域 & 局部函数

✅ 全局函数(⚠️ 不推荐)

✅ 局部函数(✅ 推荐)

五、闭包(Lua 的灵魂 🔥)

六、函数作为参数(回调)

七、尾调用(Tail Call)

八、函数常见陷阱 ⚠️

九、实用技巧 ✅

1️⃣ 参数默认值

2️⃣ 解包 table

十、一句话总结


img

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 会自动优化(尾递归安全)


八、函数常见陷阱 ⚠️

说明

默认全局

忘记 local

多返回值截断

只在表达式末尾保留

参数无类型

需手动检查

无重载

后定义覆盖前定义


九、实用技巧 ✅

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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐