对 Lua闭包 知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助
2024-08-31 05:10:23
Lua闭包
--当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界。
--闭包是由函数与其相关的引用环境组合而成的实体 闭包=函数+引用环境
--不是在局部作用范围内定义的一个变量,同时,它又不是一个全局变量 --upvalue 由于有了这样的一种变量存在,所以就有了lua中的闭包
--上面那个变量主要应用在嵌套函数和匿名函数里。
--在lua函数中在定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有“局部变量”,而这些变量就被称为该内嵌函数的upvalue
--upvalue :是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(upvalue)
--upvalue实际指的是变量而不是值,这些变量可以在内部函数之间共享
function newMoney()
local i =
return function() --匿名函数
i=i+
return i
end
end
c1=newMoney()
print(c1()) --输出 1
print(c1()) --输出 2
print(c1()) --输出 3 --把闭包当成了一个迭代器
tabl = {,,,,,,,,}
function ita(t)
local i =
return function()
i = i+
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 = --upvalue
function InnerText1() --内嵌函数
print(iVal)
end
function InnerText2() --内嵌函数
iVal = iVal+
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
最新文章
- [译]基于GPU的体渲染高级技术之raycasting算法
- 关于SubSonic3.0未处理InvalidOperationException异常(关键字TOP附近有语法错误)的处理
- OC基础--构造方法 id类型
- 从零开始一个iOS项目(一)——基本准备以及cocopods的安装
- 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
- hadoop2.0单机安装
- 【Tsinghua OJ】祖玛(Zuma)问题
- NHIBERNATE的简单框架的设计
- 在C++98基础上学习C++11新特性
- 微信小程序-获取经纬度
- Nodejs实现用户注册
- 用 Mathematica 获取图片的 RGB 三基色
- Robot Framework脚本在jenkins执行完之后无法查看日志
- Java中有关Null的9件事(转)
- Web API 2 自定义默认Identity Table Name
- (P2022 有趣的数)||(zoj Little Sub and Mr.Potato's Math Problem)(思维)
- 如何在 Ubuntu 中安装 Node.js
- MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器
- Mybatis 模糊查询 like【笔记】Could not set parameters for mapping
- (转)USB体系结构
热门文章
- Java 两个整数相除保留两位小数,将小数转化为百分数
- IIS发布后出现“如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”错误
- JAVA正則表達式小总结
- ant+jmeter中build.xml配置详解
- web端log4net输出错误日志到mysql
- Mac safari 下iframe的hash取不到BUG
- Android热更新实现原理
- 在Twitter信息流中大规模应用深度学习——推文的相关度计算使用了深度学习
- nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
- lodop使用