前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Lua中的闭包

Lua中的闭包

作者头像
keyle
发布2024-11-01 12:14:55
发布2024-11-01 12:14:55
6300
代码可运行
举报
文章被收录于专栏:礼拜八不工作礼拜八不工作
运行总次数:0
代码可运行

继续之前的Lua系列教程,这里记录一些关于闭包的内容

闭包

代码语言:javascript
代码运行次数:0
复制
local function func0(param)
    local function f1()
        param = param + 10
        print(param)
        return param
    end
    local function f2()
        param = param + 2
        print(param)
        return param
    end
    return f1,f2
end

local sub1,sub2 = func0(10)
sub1() --20
sub2() --22
sub1() --32
sub2() --34

由于 f1 和 f2 是闭包,它们可以访问并修改同一个 param 变量,即使在 func0 执行完毕之后。每次调用这些闭包时,它们都会记住 param 的当前值,并在下一次调用时继续修改它。

upvalue共享(嵌套的闭包)

在Lua中,每个闭包可以有一个upvalue值,或者多个闭包共享一个upvalue数值param。

重要的是要理解,upvalue是共享的,并且是在闭包创建时捕获的。这意味着,对于由func0返回的每一个闭包(即f1和f2),它们共享相同的upvalue引用,即它们对param的引用是相同的。因此,当f1或f2修改param的值时,这个改变对其他闭包以及外部函数FunctionMain中可见的param都是可见的。

代码语言:javascript
代码运行次数:0
复制
function FunctionMain(param)
    local function func0()
        local function f1()
            param = param + 10
            print(param)
            return param
        end
        local function f2()
            param = param + 2
            print(param)
            return param
        end
        return f1,f2
    end
    return func0
end

func0 = FunctionMain(10)

local sub1,sub2 = func0()
sub1() --20
sub2() --22
local sub3,sub4 = func0()
sub3() --32
sub4() --34
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 礼拜八不工作 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 闭包
    • upvalue共享(嵌套的闭包)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档