LUA进阶教程——函数进阶(闭包、高阶函数、协程基础)
闭包(Closure):函数捕获外部变量local function counter()
local i = 0
return function()
i = i + 1
return i
end
end
local c1 = counter()
print(c1()) -- 1
print(c1()) -- 2高阶函数(函数作为参数 / 返回值)
-- map
local function map(t, func)
local res = {}
for i,v in ipairs(t) do
res = func(v)
end
return res
end
local nums = {1,2,3}
local double = map(nums, function(x) return x*2 end)
-- double = {2,4,6}协程(Coroutine):轻量级并发
-- 创建协程
local co = coroutine.create(function()
for i=1,3 do
print("co: "..i)
coroutine.yield(i) -- 暂停并返回
end
end)
-- 恢复执行
print(coroutine.resume(co)) -- co:1 → true 1
print(coroutine.resume(co)) -- co:2 → true 2
print(coroutine.resume(co)) -- co:3 → true 3
print(coroutine.resume(co)) -- false nil(结束)
页:
[1]