欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lua中闭包的应用

程序员文章站 2024-03-17 23:50:10
...

什么是闭包

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。(百度百科)不如直接来例子理解的快

举例

以Lua语言为例

	function DoActive()
		local Hp = 100
		local Mp = 100
		function GetHp()
			Hp= Hp + 1
			return Hp
		end
		return GetHp()
	end
	--此时在方法体外去接受DoActive
	local A = DoActive()
	--此时DoActive会把跟GetHp()相关联的数据形成一个闭包return出来(Hp),而无用的数据(Mp)会被GC掉
	--现在A中 有GetHp函数,并且Hp = 101  形成闭包的函数跟数据会在一个空间内储存并挂起,调用时执行
	A() -- Hp = 102
	A() -- Hp = 103

闭包的概念

上面代码中的GetHp函数,就是一个闭包,百度百科的概念比较抽象,我觉得内部函数被保存到外部时,将会生成闭包。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包的用途

让需要保存的数据一直保存在内存中,而不会因DoActive()方法的调用而清除,不用的数据随GC清除,实现一些属性的私有化(例如例子中的Hp只能由A来调用)

相关标签: Lua Unity