Lua的闭包到底是什么?到底有什么用?
-- -- ocos2d.x.version: cocos2d-x-3.15.1
-- -- 语言: Lua
-- -- 编译: xcode
-- -- 工具: sublimeText
print("test====")
-- lua的闭包是什么,lua的闭包到底有什么用。-- 要想了解lua的闭包的什么,我们来了解一个场景,假如我们要写一个计数器:
-- -- 方法1 全局变量
-- CC_count = CC_count + 1;
-- CC_count = CC_count + 1;
-- print("CC_count==== ",CC_count); -- 2
-- -- [LUA-print] test====
-- -- [LUA-print] CC_count==== 2
-- -- 但是这里有个问题,如果那个人一不小心写错了
-- CC_count = nil;-- 这样可能使得整个程序有崩溃的危险.-- -- 方法2 模块
-- local t3 = require "app.TestModule"
-- -- t3.addCount(); [LUA-print] count === 1
-- -- t3.addCount(); [LUA-print] count === 2
-- -- 但是我们可能用到地方都要去引用这个模块,或者使用全局变量保存这个模块的对象,好像也不是很理想.-- 方法3 闭包local function getCount( )local _addCount = 0;local function addCount( )_addCount = _addCount + 1;return _addCount;endreturn addCount;endlocal addCount = getCount();print(addCount());print(addCount());-- [LUA-print] 1-- [LUA-print] 2-- 用闭包实现了计数器,函数返回了上层函数的局部变量在调用本函数加1,-- 其他人是无法去修改上层函数的_addCount,也不会造成增加全局变量,和增加模块的引用.-- 缺点:local addCount1 = getCount();local addCount2 = getCount();local addCount3 = getCount();-- 此时内存里面已经有4个变量_addCount常驻在内存中(包括上面的)-- 每次调用getCount()都会生成一个新的对象和变量在内存里面没有被销毁.-- 清理闭包内存:-- 如果不用闭包对象可及时销毁:addCount1 = nil, addCount2 = nil, addCount3 = nil-- 闭包实现迭代器
-- local function getVal( _table )
-- local sum = 0;
-- return function ( ... )
-- sum = sum + 1;
-- return _table[sum];
-- end
-- end-- local t = {1,2,3};
-- local iter = getVal(t);
-- while 1 do
-- local val = iter();
-- if not val then
-- break;
-- end
-- print("val ==== ",val)
-- end
-- -- [LUA-print] val ==== 1
-- -- [LUA-print] val ==== 2
-- -- [LUA-print] val ==== 3-- 闭包:cocos2d常用的函数值传递 (访问上层函数里面的btn 作为值传递到外层函数)
-- local testUI = testUI or {}
-- local testUI:onBtnClick(sender,event)
-- --可获取的参数有:隐藏的self,btn,event
-- end
-- function testUI:initButton()
-- local btn = UIButton:create()
-- --重点来了
-- btn:addListenHandler(function(event)
-- --使用闭包把self,btn都传进去了....
-- self:onBtnClick(btn,event)
-- end
-- )
-- end
-- return testUI-- 通过上面的案例我们可以得知:闭包就是能够读取上层函数其他函数内部变量的函数。他的作用是变量在内层表现出来,外部不能访问.
-- 优点: 可以避免全局变量的污染,(可以使局部变量内存常驻)
-- 缺点: 如果过多使用闭包会导致很多变量在内存常驻,可能导致内存泄露,在不用闭包对象的时候我们要及时释放内存,可参考上面(清理闭包内存);
这个是路径说明
这里是路径配置的代码
-- 0 - disable debug info, 1 - less debug info, 2 - verbose debug info -
DEBUG = 2-- use framework, will disable all deprecated API, false - use legacy API
CC_USE_FRAMEWORK = true-- show FPS on screen
CC_SHOW_FPS = true-- disable create unexpected global variable
CC_DISABLE_GLOBAL = true-- for module display
CC_DESIGN_RESOLUTION = {width = 960,height = 640,autoscale = "FIXED_HEIGHT",callback = function(framesize)local ratio = framesize.width / framesize.heightif ratio <= 1.34 then-- iPad 768*1024(1536*2048) is 4:3 screenreturn {autoscale = "FIXED_WIDTH"}endend
}-- 测试定义的全局变量
CC_count = 0;
总结:
闭包方便,但是也有内存管理缺陷,且用其管理。
手动码字,真心不易,如有不懂可以联系大嫂,当前有创业或者发财的一定要联系我噢,风里雨里大嫂一直等你,V:1154195328; QQ = V.
Lua的闭包到底是什么?到底有什么用?相关推荐
- 深入理解Lua的闭包:概念和应用
深入理解Lua的闭包一:概念和应用_cbbbc的博客-CSDN博客 本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理. 闭包的概念 在Lua中 ...
- Lua中 'local xxx do ... end' 到底表达了什么
前言 在一些lua的项目中偶尔会发现local xxx do ... end这种写法,那么这种写法有什么作用,或者说这么写又有什么好处呢?下面我们来逐步分析一下. 分析 首先实际代码中的写法可能看起来 ...
- h5 一镜到底_传说中的一镜到底效果,到底是怎么玩的?
一镜到底这种高级技术其实已经存在多年了.相信许多人都了解影视行业的人都知道导演和摄影师都喜欢采用这种表现方式.一方面是为了增加画面的内容,烘托剧情.另一方面,则是导演在"旁敲侧击" ...
- DevOps 到底是什么到底是什么
链接:https://www.zhihu.com/question/55874411/answer/608052871 DevOps 到底是什么 2018 年,我们走访了近百个分布在各行各业中的 IT ...
- 九章量子计算机 科学杂志,张礼立 : 中国 “九章”量子计算机到底厉害在哪?...
对我而言,没学过量子力学,也不是量子计算的专家,但多少对这个话题还是非常感兴趣的,毕竟,数字和信息科技的工作中,很多时候也离不开对量子计算有些讨论和学习. 今天周末,我想就借着这个重大的突破事件,和大 ...
- lua 函数调用1 -- 闭包详解和C调用
这里, 简单的记录一下lua中闭包的知识和C闭包调用 前提知识: 在lua api小记2中已经分析了lua中值的结构, 是一个 TValue{value, tt}组合, 如果有疑问, 可以去看一下 一 ...
- 印度评论九章量子计算机,张礼立:中国 “九章”量子计算机到底厉害在哪?...
[背景信息]12月4日,<科学>杂志公布了中国"九章"的重大突破. 这台由中国科学技术大学潘建伟.陆朝阳等学者研制的76个光子的量子计算原型机,推动全球量子计算的前沿研 ...
- 关于CNN的权重共享,CNN到底学到了什么?
CNN的fliter里的每个值都是学习出来的不是事先设定好的. 经过fliter处理后得到是特征图(feature map) 卷积减少权重参数的本质: 权重共享,不同的fliter会在某些神经元上权重 ...
- 量子计算机九章能否预测未来,张礼立 : 中国 “九章”量子计算机到底厉害在哪?...
原标题:张礼立 : 中国 "九章"量子计算机到底厉害在哪? [背景信息]12月4日,<科学>杂志公布了 中国 "九章" 的重大突破. 这台由中国科学 ...
最新文章
- Redis源码和java jdk源码中hashcode的不同实现
- [系统开发] Postfix 邮件管理系统
- C笔记(2014-12备份)
- Android总结之链式调用(方法链)
- module._init_() takes at most 2 arguments (3 given) (scrapy tutorial w/ xpath)
- 工作组模式下专用队列(Private Queue)如何引用远程队列路径
- 华为怎么升级Android11,华为EMUI 11/安卓11升级名单曝光 快来看看你的手机是否支持...
- PPC WM5 输入法屏蔽插件
- slf4j mysql_能显示sql语句,没有报错,但是MySQL里没有表?还有,slf4j是必须的吗?...
- java 包装类缺点_Java 自动拆箱和自动装箱学习笔记
- 试题训练9 旋转矩阵(数组)
- firefly-rk3288开发板Linux驱动——W25Q32 SPI驱动
- 《黑客帝国》效果的NB数字雨
- Linux网络编程:状态机
- 文本分类(2)-基于传统机器学习方法进行文本分类
- 219-6-3Google浏览器书签备份
- 2022Android高级面试题汇总解答,2022-2022阿里巴巴安卓面试真题解析
- animite cc html5项目,Animate CC HTML5/Canvas使用actionscript控制嵌套的MovieClip時間軸
- Android学习-手把手教学实现仿微信发带图片朋友圈的UI设计
- iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪
热门文章
- alexnet实验偶遇:loss nan, train acc 0.100, test acc 0.100情况,通过bn层加快收敛速度,防止过拟合,防止梯度消失、爆炸
- 利用BLKTRACE分析IO性能
- Python随机数函数
- openwrt wifi调试记录
- 利用python的强大函数库,实现波形的小波降噪、带通滤波、时阈分析、FFT波形转换
- OSChina 周三乱弹 —— 如何判断程序员在做什么
- 区域经济学研究对象与内容
- 16哈理工新生赛 C 方方正正 (证明题)
- 【汇正财经】蓝皮书强推新能源发展,储能并网加速景气提升
- Lottie:简单上手高性能的动画方案(附精美Android-Lottie-Demo)