【lua】对Lua闭包知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助

本文深入讲解Lua中的闭包概念,包括词法定界、upvalue的作用及如何利用闭包实现迭代器等功能。通过具体实例演示了闭包在内嵌函数中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--*************************闭  包***********************

 

--当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界。
--闭包是由函数与其相关的引用环境组合而成的实体  闭包=函数+引用环境
--不是在局部作用范围内定义的一个变量,同时,它又不是一个全局变量  --upvalue 由于有了这样的一种变量存在,所以就有了 lua中的闭包
--上面那个变量主要应用在嵌套函数和匿名函数里。
--在lua函数中在定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有“局部变量”,而这些变量就被称为该内嵌函数的upvalue
--upvalue :是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(upvalue)

 

--upvalue实际指的是变量而不是值,这些变量可以在内部函数之间共享

function newMoney()
	local i =0
	return function() --匿名函数
		i=i+1
		return i 
	end
end
c1=newMoney()
print(c1()) --输出 1
print(c1()) --输出 2
print(c1()) --输出 3


--把闭包当成了一个迭代器
tabl = {1,2,3,4,5,6,8,7,9}
function ita(t)
	local i = 0
	return function()
		i = i+1
		return t[i]
	end
end
for i in ita(tabl) do    --在这里体现把闭包当成了迭代器
	print(i)          --输出1 2 3 4 5 6 8 7 9
end

--关于上述说法的一些例子***********************************************
function Text()
	local iVal = 10   --upvalue
	function InnerText1()  --内嵌函数
		print(iVal)
	end
	function InnerText2()  --内嵌函数
		iVal = iVal+10
	end
	return InnerText1,InnerText2
end
--将函数赋值给变量,此时变量a绑定了函数innerFunc1,b 绑定了函数InnerFunc2
local a,b = Text()
a()  --调用a
b()  --调用b ,在b函数中修改了upvalue  iVal
a()  -- 调用a ,打印修改后的upvalue
-- 输出结果为  10   20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值