lua闭包,ios block,C++lambda函数

昨天被问及cocos2dx 3.0里面大量使用的lambda函数,我只能说上个函数指针,顿时朋友被鄙视了。。

下面是三篇描述这三种机制的文章,不去深究每一种语言的具体实现机制,但是要记住各自的用法。

像我这种初学者,有的说lua闭包只是一个函数的变量,可以修改函数的局部变量。block是一个对象,默认情况下可以访问函数局部变量,但是不能修改。C++lambda作为匿名函数,使用方法类似于函数指针。 这种乱七八杂的概念,一塌糊涂。。。。


lua闭包 http://blog.sina.com.cn/s/blog_547c04090100qfps.html

http://hi.baidu.com/wplzjtyldobrtyd/item/a293ac3c243e70ff97f88d07

可以访问和修改函数的局部变量


ios block  http://li-bonan.blog.163.com/blog/static/135564770201281315927761/

Blocks可以访问局部变量,但是不能修改。

如果要修改必须如下定义局部变量: __block int multiplier = 7;



C++lambda函数  http://blog.youkuaiyun.com/srzhz/article/details/7934652  http://www.cnblogs.com/hujian/archive/2012/02/14/2350306.html

上面的博客中有lambda在for_each中的详细应用,引入了一批for_each的详细用法:http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520477.html


想想一下代码的运行结果是什么:

    int a = 42;
    auto f = [a]{return a;};
    a = 0;
    std::cout<<f()<<std::endl;
答案是42. 为什么?请看下面

captures定义了各种变量截取的选项:
  • [] 不截取任何变量
  • [&} 截取外部作用域中所有变量,并作为引用在函数体中使用
  • [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用
  • [=, &foo]   截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
  • [bar]   截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
  • [this]   截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
    int a = 42;
    auto f = [&a]{return a;};
    a = 0;
    std::cout<<f()<<std::endl;
现在结果就是0了。

for_each就是一个函数模板,在函数模板中做了自增的操作,所以只需要传入lambda函数就可。

template<typename InputIterator, typename Function>
Function for_each(InputIterator beg, InputIterator end, Function f) {
  while(beg != end) 
    f(*beg++);
}


在后期的项目实践中多写,理清楚各种的用法吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值