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

最新文章

  1. [译]基于GPU的体渲染高级技术之raycasting算法
  2. 关于SubSonic3.0未处理InvalidOperationException异常(关键字TOP附近有语法错误)的处理
  3. OC基础--构造方法 id类型
  4. 从零开始一个iOS项目(一)——基本准备以及cocopods的安装
  5. 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档
  6. hadoop2.0单机安装
  7. 【Tsinghua OJ】祖玛(Zuma)问题
  8. NHIBERNATE的简单框架的设计
  9. 在C++98基础上学习C++11新特性
  10. 微信小程序-获取经纬度
  11. Nodejs实现用户注册
  12. 用 Mathematica 获取图片的 RGB 三基色
  13. Robot Framework脚本在jenkins执行完之后无法查看日志
  14. Java中有关Null的9件事(转)
  15. Web API 2 自定义默认Identity Table Name
  16. (P2022 有趣的数)||(zoj Little Sub and Mr.Potato's Math Problem)(思维)
  17. 如何在 Ubuntu 中安装 Node.js
  18. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器
  19. Mybatis 模糊查询 like【笔记】Could not set parameters for mapping
  20. (转)USB体系结构

热门文章

  1. Java 两个整数相除保留两位小数,将小数转化为百分数
  2. IIS发布后出现“如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”错误
  3. JAVA正則表達式小总结
  4. ant+jmeter中build.xml配置详解
  5. web端log4net输出错误日志到mysql
  6. Mac safari 下iframe的hash取不到BUG
  7. Android热更新实现原理
  8. 在Twitter信息流中大规模应用深度学习——推文的相关度计算使用了深度学习
  9. nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
  10. lodop使用