Cocos2d-Lua之闭包
2016-06-18 08:43
411 查看
对于function中定义的local变量只能活在这个function中,出了这个function就不存在了。
输出结果:
这样的输出是理所当然的。
如果应用闭包,也就是说在一个函数中再嵌套一个函数,并返回被嵌套的函数,就会让外层函数的local变量的声明周期得到扩展,这跟C/C++中的函数中的static变量很类似,但又不同,先看个例子:
输出结果:
可以看到bag函数中的local变量x的声明周期得到了扩展,保留了上次的值,并且对于两个bag赋予不同的初值进行同步工作,互相是不干扰的。就像同一个枪口发射多颗子弹,他们的运动轨迹相互是不被干扰的,所以闭包在这方面的游戏开发应用是非常广泛的。
再与C++的函数中的static变量比较一下:
输出结果:
可以看到函数内部的变量的生命周期同样得到了扩展,可以两个函数传入不同的参数进行工作时,第二个参数传入的值完全被忽略了,所以static是相互干扰的,这是不同于Lua闭包的重要特征。
function bag(a) local x = a x = x + 1 print(x) end for i = 1, 10 do bag(3) bag(10) print("-----------------") end
输出结果:
这样的输出是理所当然的。
如果应用闭包,也就是说在一个函数中再嵌套一个函数,并返回被嵌套的函数,就会让外层函数的local变量的声明周期得到扩展,这跟C/C++中的函数中的static变量很类似,但又不同,先看个例子:
--Lua语言 function bag(a) local x = a function ff() x = x + 1 print(x) end return ff end local fun1 = bag(3) local fun2 = bag(10) for i = 1, 10 do fun1() fun2() print("-----------------") end
输出结果:
可以看到bag函数中的local变量x的声明周期得到了扩展,保留了上次的值,并且对于两个bag赋予不同的初值进行同步工作,互相是不干扰的。就像同一个枪口发射多颗子弹,他们的运动轨迹相互是不被干扰的,所以闭包在这方面的游戏开发应用是非常广泛的。
再与C++的函数中的static变量比较一下:
void func(int a) { static int x = a; x++; cout << x << endl; } int main() { for (int i = 0; i < 10; i++) { func(3); func(10); cout << "----------------------" << endl; } system("pause"); return 0; }
输出结果:
可以看到函数内部的变量的生命周期同样得到了扩展,可以两个函数传入不同的参数进行工作时,第二个参数传入的值完全被忽略了,所以static是相互干扰的,这是不同于Lua闭包的重要特征。
相关文章推荐
- Cocos2d-Lua之协同程序
- TexturePacker 4.X 在Cocos2d-x 3.x 中帧动画实现(官方文档)
- 小水滴所理解的Cocos2dx内存管理机制
- Cocos2d-Lua之异常处理
- Cocos2d-Lua之文件操作
- Cocos2d-Lua之math库
- Cocos2d-Lua之随机数
- cocos2dx 渲染任意形状贴图
- 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法
- windows cocos2d-x OpenGL error 0x0506 quick-cocos2d-x\lib\cocos2d-x\cocos2dx\sprite_nodes\ccsprite.c
- Cocos2d-Lua之string
- cocos2dx 3.8加载cocos studio csb文件
- cocos2D开发游戏
- Cocos2d-Lua之table的排序
- Cocos2d-Lua之Lua文件的加载与运行
- cocos2d-x面试题合集
- CocosPosd安装,错误
- Cocos2d-Lua之table的删除与插入
- cocos2dx 一张图片的闪烁的动画
- Cocos2d-Lua之table的遍历