偶然看到闭包这个词,时间瞬间回到大学时,在3号楼,李院长给我们上离散数学,他讲的滔滔不绝,我们听得昏天暗地……
在网上查了很多概念,表示看不懂,什么自由变量,什么词法上下文,哇哦~
用自己的语言,结合网上各位的总结,给一个简单的对应C语言中的定义吧,闭包就是利用嵌套函数这种形式,对于自己作用域之外的变量进行操作,表现代码为
-
void* caller()
-
{
-
int temp = 1314;
-
void callee() {
-
printf("%d\n", temp);
-
}
-
return test;
-
}
caller中嵌套定义了callee,同时,callee中读取了temp变量,一般,我说的是一般(嵌套定义合法时),callee是不能访问temp的,但是这就是闭包,当然,要完成闭包还有一步,就完成对于callee的调用
-
#include <stdio.h>
-
void* caller() {
-
int cnt = 0;
-
void callee() {
-
cnt++;
-
printf("%d\n", cnt);
-
}
-
return callee;
-
}
-
int main()
-
{
-
void(*callee)(void) = caller();
-
callee();
-
return 0;
-
}
这样,就说callee是一个闭包。
自己浅谈下闭包的实现吧(参考别人的思路),当调用闭包时,有一个调用链的关系,以上面的代码为例,就是,callee->caller->全局,直到找到cnt这个变量为止,所以说,需要保存许多信息,开销比较大。
思考:
1、首先,C中不能嵌套定义函数(GCC扩展好像可以),自己没有尝试,之前在一本什么hack的书中看过这种代码,这是把代码写到栈上,还有把代码写到堆上的呢,自己读书少哇~
2、其次,闭包有什么用,什么?Lambda表达式?我读书少,你不要骗我。
3、闭包和协程的关系,路过的大神,给个链接呗!
欢迎拍砖!欢迎讨论!
附上参考链接,代码都是盗人家的,不好意思~~~
/>
/>
/>
http://www.cnblogs.com/super-d2/archive/2012/06/12/2546236.html
阅读(7936) | 评论(0) | 转发(0) |