对 Lua闭包 知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助
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
对 Lua闭包 知识点的学习的总结 ,在这里和大家分享一下,希望对大家有所帮助的更多相关文章
- LUA闭包概念演示
闭包的一个重要场景,形成一个自治的环境, 让操作可以封闭运行, 即函数运行时有状态的,可以从闭包创建时候的环境独立开来. 例如下面的lua闭包, genFilter 其入参parmIn是 函数的内部变 ...
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
- Lua和C++交互 学习记录之八:C++类注册为Lua模块
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之六:全局函数交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之五:全局数组交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之四:全局table交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之三:全局值交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
随机推荐
- WeX5 IDE 手机移动开发+JAVA +大数据
http://www.wex5.com/wex5/?qb360=wex501=3534 前端技术 HTML,CSS,JavaScript,EasyUI,Jquery,HTML5,CSS3,Jquery ...
- Clojure:解决Selmer与AngularJS的 标签混淆问题
Selmer是Clojure的一个模板类库,下面是它的一个DEMO模板: <ul> {% for item in items %} <li>{{item}}</li> ...
- GDUT Krito的讨伐(bfs&&优先队列)
题意 Description Krito最终干掉了99层的boss,来到了第100层. 第100层能够表示成一颗树.这棵树有n个节点(编号从0到n-1),树上每个节点可能有非常多仅仅怪物. Krito ...
- 逆波兰法求解数学表达示(C++)
主要是栈的应用,里面有两个函数deleteSpace(),stringToDouble()在我还有一篇博客其中:对string的一些扩展函数. 本程序仅仅是主要的功能实现,没有差错控制. #inclu ...
- Spring+Mybatis之注册功能demo
这次先注册功能的是基于登录之后,所以很多配置,实体类等就不再赘述了. 首先也不是直接在地址栏输入一个网页就可以到注册页面的.而是需要通过后台发送一个请求从而跳转到注册页面 先写注册页面,body部分 ...
- Uboot中支持lcd和hdmi显示不同的logo图片【转】
本文转载自:http://blog.csdn.net/u010865783/article/details/54953315 在lcd为竖屏,hdmi显示横屏的情况下,如果按照默认的uboot显示框架 ...
- outlook创建收信规则,将收到的所有邮件,转发到qq邮箱,然后删除
因为outlook默认只有400M的空间. 使用企业邮箱的时候,很快就满了. 本来是打算在qq邮箱中,添加其他邮箱来收取的. http://service.mail.qq.com/cgi-bin/he ...
- 树形dp初步
其实很早之前就学过树形dp,今天总接一下.树形dp就是一个在树上跑的dp(滑稽) 先是一道板子题:树上最大独立集 直接上代码了. #include<iostream> #include&l ...
- bzoj 1034 [ ZJOI 2008 ] 泡泡堂BNB —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1034 一开始想了个很麻烦的贪心做法,对于每个 a[i],找第一个大于它的 b 匹配…… 然后 ...
- Ruby 各种离奇运算符
创建: 20170717 更新: 改变分类 Rails ---> Ruby 更新: 2017/10/16 增加&., #try 参考: 传送门 ||= a ||= b相当于 a = ...