Appearance
函数
函数是 Lua 中的第一类值,它可以存储在变量中,作为参数传递,或作为返回值。本章节将介绍 Lua 中函数的定义、调用和相关特性。
函数定义
在 Lua 中,函数可以通过两种方式定义:
方式一:使用 function 关键字
lua
function add(a, b)
return a + b
end方式二:使用变量赋值
lua
local add = function(a, b)
return a + b
end函数调用
函数调用使用圆括号:
lua
local result = add(10, 5)
print(result) -- 输出 15如果函数只有一个参数,且参数是字符串或表,可以省略圆括号:
lua
print "Hello" -- 等同于 print("Hello")
local t = {1, 2, 3}
table.insert t, 4 -- 等同于 table.insert(t, 4)函数参数
基本参数
lua
function greet(name)
print("Hello, " .. name .. "!")
end
greet("Lua") -- 输出 Hello, Lua!可变参数
使用 ... 表示可变参数:
lua
function sum(...)
local total = 0
for _, v in ipairs({...}) do
total = total + v
end
return total
end
print(sum(1, 2, 3, 4, 5)) -- 输出 15命名参数
Lua 没有内置的命名参数,但可以使用表来模拟:
lua
function person(info)
local name = info.name or "匿名"
local age = info.age or 0
print("姓名:" .. name .. ",年龄:" .. age)
end
person({name = "张三", age = 30}) -- 输出 姓名:张三,年龄:30
person({name = "李四"}) -- 输出 姓名:李四,年龄:0函数返回值
单个返回值
lua
function add(a, b)
return a + b
end
local result = add(10, 5)
print(result) -- 输出 15多个返回值
Lua 函数可以返回多个值:
lua
function getMinMax(a, b, c)
local min = math.min(a, b, c)
local max = math.max(a, b, c)
return min, max
end
local min, max = getMinMax(10, 5, 15)
print(min, max) -- 输出 5 15忽略返回值
使用下划线 _ 忽略不需要的返回值:
lua
local _, max = getMinMax(10, 5, 15)
print(max) -- 输出 15函数作为值
函数是 Lua 中的第一类值,可以存储在变量中:
lua
local add = function(a, b)
return a + b
end
local operation = add
print(operation(10, 5)) -- 输出 15函数作为参数
函数可以作为参数传递给其他函数:
lua
function map(t, f)
local result = {}
for i, v in ipairs(t) do
result[i] = f(v)
end
return result
end
local numbers = {1, 2, 3, 4, 5}
local doubled = map(numbers, function(x)
return x * 2
end)
for i, v in ipairs(doubled) do
print(v) -- 输出 2, 4, 6, 8, 10
end函数作为返回值
函数可以作为返回值:
lua
function createCounter()
local count = 0
return function()
count = count + 1
return count
end
end
local counter = createCounter()
print(counter()) -- 输出 1
print(counter()) -- 输出 2
print(counter()) -- 输出 3闭包
闭包是指一个函数可以访问其定义环境中的变量:
lua
function createAdder(x)
return function(y)
return x + y
end
end
local add5 = createAdder(5)
print(add5(10)) -- 输出 15
local add10 = createAdder(10)
print(add10(10)) -- 输出 20递归函数
函数可以递归调用自身:
lua
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
print(factorial(5)) -- 输出 120尾递归
尾递归是指函数的最后一个操作是调用自身,Lua 会对尾递归进行优化,避免栈溢出:
lua
function factorial(n, acc)
acc = acc or 1
if n == 0 then
return acc
else
return factorial(n - 1, n * acc)
end
end
print(factorial(1000)) -- 不会栈溢出小结
本章节介绍了 Lua 中函数的定义、调用、参数、返回值、函数作为值、函数作为参数、函数作为返回值、闭包、递归函数和尾递归等内容。掌握这些内容,对于编写 Lua 程序非常重要。