hand
_1_34_32
4
返回栏目
1k
2k
1k
2k
1k
1k
2k
2k
2k
2k
2k
2k
3k
3k
2k
2k
2k
1k
2k
2k
2k
2k
2k
2k
2k
2k
1k
1k
1k
2k
1k
1k
2k
1k
2k
2k
2k
2k
2k
2k
2k
1k
2k
2k
2k
2k
2k
3k
2k
2k
6k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
2k
2k
2k
3k
3k
3k
1k
3k
3k
5k
2k
2k
2k
1k
1k
2k
2k
1k
1k
1k
2k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
2k
2k
3k
3k
2k
2k
2k
2k
4k
2k
3k
2k
3k
2k
3k
2k
3k
2k
2k
2k
3k
返回Lua栏目
作者:
贺及楼
成为作者
更新日期:2025-02-27 21:47:36
在 Lua 编程中,高阶函数是一个强大且实用的概念。高阶函数是指那些能够接收一个或多个函数作为参数,或者返回一个函数的函数。这种特性使得 Lua 代码更加灵活、可复用,并且能够实现一些复杂的编程模式。本文将详细介绍 Lua 高阶函数的概念,并通过具体的例子进行演示。
在 Lua 中,函数是一等公民,这意味着函数可以像其他数据类型(如数字、字符串)一样被存储在变量中,作为参数传递给其他函数,或者作为返回值返回。这种特性是高阶函数得以实现的基础。
-- 定义一个简单的函数
function add(a, b)
return a + b
end
-- 将函数存储在变量中
local myAdd = add
-- 调用存储在变量中的函数
print(myAdd(3, 5)) -- 输出: 8
接收函数作为参数的高阶函数可以根据传入的不同函数执行不同的操作,从而实现代码的复用。
Lua 的 table.sort
函数就是一个接收函数作为参数的高阶函数,它可以根据传入的比较函数对表格进行排序。
-- 定义一个表格
local numbers = {5, 2, 8, 1, 9}
-- 定义一个比较函数,用于升序排序
function ascending(a, b)
return a < b
end
-- 使用 table.sort 进行排序
table.sort(numbers, ascending)
-- 输出排序后的表格
for _, num in ipairs(numbers) do
print(num)
end
我们可以实现一个自定义的映射函数,它接收一个表格和一个函数作为参数,对表格中的每个元素应用该函数,并返回一个新的表格。
function map(tbl, func)
local result = {}
for _, value in ipairs(tbl) do
table.insert(result, func(value))
end
return result
end
-- 定义一个表格
local numbers = {1, 2, 3, 4, 5}
-- 定义一个函数,用于将每个元素平方
function square(x)
return x * x
end
-- 使用 map 函数
local squaredNumbers = map(numbers, square)
-- 输出结果
for _, num in ipairs(squaredNumbers) do
print(num)
end
返回函数的高阶函数可以根据不同的条件或参数生成不同的函数,从而实现动态编程。
我们可以实现一个高阶函数,它接收一个数字作为参数,并返回一个新的函数,该函数可以将传入的数字与之前接收的数字相加。
function makeAdder(x)
return function(y)
return x + y
end
end
-- 生成一个加 5 的函数
local add5 = makeAdder(5)
-- 调用生成的函数
print(add5(3)) -- 输出: 8
类型 | 描述 | 示例 |
---|---|---|
接收函数作为参数 | 高阶函数接收一个或多个函数作为参数,根据传入的函数执行不同的操作 | table.sort 、自定义 map 函数 |
返回函数 | 高阶函数返回一个新的函数,可根据不同的条件或参数生成不同的函数 | makeAdder 函数 |
高阶函数是 Lua 编程中的一个重要概念,它可以让我们编写出更加灵活、可复用的代码。通过接收函数作为参数或返回函数,我们可以实现许多复杂的编程模式,提高代码的质量和可维护性。希望本文的介绍和示例能够帮助你更好地理解和应用 Lua 中的高阶函数。
Lua
整章节共127节
快分享给你的小伙伴吧 ~