0
点赞
收藏
分享

微信扫一扫

lua-闭包


在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

举报

相关推荐

0 条评论