闭包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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() sub2() sub1() sub2()
|
由于 f1 和 f2 是闭包,它们可以访问并修改同一个 param 变量,即使在 func0 执行完毕之后。每次调用这些闭包时,它们都会记住 param 的当前值,并在下一次调用时继续修改它。
upvalue共享(嵌套的闭包)
在Lua中,每个闭包可以有一个upvalue值,或者多个闭包共享一个upvalue数值param。
重要的是要理解,upvalue是共享的,并且是在闭包创建时捕获的。这意味着,对于由func0返回的每一个闭包(即f1和f2),它们共享相同的upvalue引用,即它们对param的引用是相同的。因此,当f1或f2修改param的值时,这个改变对其他闭包以及外部函数FunctionMain中可见的param都是可见的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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() sub2() local sub3,sub4 = func0() sub3() sub4()
|
本文标题:Lua中的闭包
文章作者:Keyle
发布时间:2024-03-27
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/25378/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可