cocos2d3.10 简单引用lambda表达式用作回调函数
2016-09-26 18:55
225 查看
1.匿名函数 出现在 matlab 中。它是matlab中定义的一种函数形式。
2.匿名函数只具备函数体 没有函数名称
因为它只在此处使用 并且不需要在其他地方调用它,那么名称也就没有意义3.匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。
匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。
4.lambda表达式
[] () {};只有三个对符号和一个分号,分号的作用是:
[]符号,表示要开始一个lambda函数;
()符号,填写函数的参数;
{}符号,(存放代码块);
;符号 不解释;
5.动作完成后的回调函数(引用lambda表达式):
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } //官方默认 auto rootNode = CSLoader::createNode("MainScene.csb"); addChild(rootNode); //1.添加一个精灵 Sprite* runSpr = Sprite::create("CloseNormal.png"); runSpr->setPosition(Vec2(200,100)); addChild(runSpr); //2.给精灵添加一个动作 MoveTo* runSpr_move = MoveTo::create(1.5,Vec2(500, 300)); //3.执行完动作给一个动作回调(用lambda表达式) auto callFunc = [](){ printf("动作执行完了!"); }; CallFunc* func = CallFunc::create(callFunc); //4.动作执行(执行完动作,再执行回调函数) Sequence* runSpr_action = Sequence::create(runSpr_move, func, NULL); runSpr->runAction(runSpr_action); }
6.如果需要该精灵(runSprite)在回调函数内隐藏
需要修改://3.执行完动作给一个动作回调(用lambda表达式) auto callFunc = [=](){ //注意这里[]修改为了[=] printf("动作执行完了!"); //隐藏精灵 runSpr->setVisble(false); };
为什么把[]修改为[ = ]:
[]: 不截取任何变量; [&]: 截取外部作用域中所有变量,并作为引用在函数体中使用,可以简单地理解为,只要变量没有被释放,那么在lambda函数中都可以使用。但是局部变量不可以使用,因为局部变量会被释放; [=]: 截取外部作用域中所有变量,并拷贝一份在函数体中使用,即使外部变量的值改变了,但是在lambda函数执行的时候,依旧是复制时的值。 [=, &foo]: 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用 [foo]: 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量 [this]: 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
为什么不用[&]?
这里创建的精灵是在init()函数内部创建的,属于局部变量。此函数执行完毕,精灵就会被释放掉!
[&]:截取外部作用域中所有变量,并作为引用在函数体中使用。当lambda函数体内,调用该精灵时,就会报错。
相关文章推荐
- 简单尝试 Cocos2d-x 中 Lambda 表达式
- Db4o结合Linq、Lambda表达式的简单示例
- 关于正则表达式的简单引用
- Cocos2d-x开发实例:使用Lambda 表达式
- Java8特性总结(二)Lambda表达式,函数式接口,方法引用
- UVA 213 - Message Decoding 简单题 lambda表达式 23333333
- 最简单的lambda 表达式
- javaSE_8系列博客——Java语言的特性(三)--类和对象(20)--嵌套类(Lambda 表达式--VS--方法引用)
- Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
- Cocos2d-x之lambda表达式的使用
- Java 8 函数式接口、lambda表达式、方法以及构造器引用
- lambda表达式的一个简单示例
- Lambda表达式和Linq实现数据集的简单筛选并排序
- Cocos2d-x开发实例:使用Lambda 表达式
- Java之Lambda表达式和Stream类简单例子
- C# Lambda表达式 基本知识 (引用网上总结)
- Lambda 表达式创建委托Action和Func时的简单使用
- Cocos2d-x开发实例:使用Lambda 表达式
- Cocos2d-x回调函数 Lambda表达式
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API