课时 5 · 函数
课时 5 · 函数(Lua 语言基础):理解函数的定义、调用与闭包。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。
本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 Lua 在线运行器 并直接跑出结果 (课程示例统一按 5.1 跑;运行器里也能切到 5.3)。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 理解函数的定义、调用与闭包。
知识讲解
函数用 function 定义,支持参数、多返回值、可变参数(...)与递归。Lua 中函数是一等值,可存入变量与表。闭包指函数捕获了其外部局部变量,即使外层函数已返回,内部函数仍可访问这些变量。
示例:函数与闭包
function swap(a, b)
return b, a -- 多返回值
end
local x, y = swap(1, 2)
print(x, y) -- 2 1
function counter()
local c = 0
return function() -- 闭包
c = c + 1
return c
end
end
local next = counter()
print(next(), next()) -- 1 2
练习任务
- 编写数学工具函数库(求和、阶乘、斐波那契),分别用递归与非递归实现。
参考:工具函数
function sum(n) -- 1+2+...+n
local s = 0
for i = 1, n do s = s + i end
return s
end
function fact(n) -- 阶乘(递归)
if n <= 1 then return 1 end
return n * fact(n - 1)
end
function fib(n) -- 斐波那契
if n <= 2 then return 1 end
return fib(n - 1) + fib(n - 2)
end
本篇依据
- 《996 新三端 Lua 开发教学技术手册》课时 5
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。