lua-闭包
发布时间:2020-12-14 21:56:42 所属栏目:大数据 来源:网络整理
导读:在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指 不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里 ,因此若一个闭包
在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数。也就是说,在Lua中,函数是闭包一种特殊情况。 --函数可以嵌套 内部函数可以访问他外部函数中的变量 --function func() local ?index = 0 local inner = function() print("====="..index) index = index + 1 end -- 打印 =====0 inner() -- 打印 =====1 inner() -- 打印 2 print(index) end func() -- 下面两种都是函数定义 -- func_1 = function() print("Hello") end function func_2() print("Hello") end func_1() func_2() -- 函数作为函数的返回值 -- function func3() return function() print("Hello") end end --f3即为内部函数 local f3 = func3() --打印内部函数地址 print(f3) --即执行内部函数 f3() -- 被嵌套的函数可以访问他外部函数中的变量 -- func_4()中的局部变量index是可以在inner()中被使用和更改的 -- 函数的局部变量是可以保存在函数内部的,通过调用该函数内嵌的函数可以获取并修改局部变量的值, -- 该函数的局部变量和内嵌函数的组合使用,形成了闭包 print("==============================") function func_4() local index = 0 print("Hello") return function() print(index) index = index + 1 end end --先执行func_4() 函数中返回函数赋给inner local inner = func_4() print("---") --打印内部函数地址 print(inner) inner() inner() --先执行func_4() 函数中返回函数赋给other local other = func_4() other() other() 结果: =====0 =====1 2 Hello Hello function: 0027BF98 Hello ============================== Hello --- function: 0027C018 0 1 Hello 0 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |