一天三盒半 发表于 昨天 15:18

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]
查看完整版本: LUA进阶教程——函数进阶(闭包、高阶函数、协程基础)