第二个抽屉

【闭包】
定义
(Martin Fowler)
闭包的第一个关键点是闭包是一段代码加上和定义它的环境之间的绑定(they are a block of code plus the bindings to the environment they came from)。这是闭包和函数指针等其它相似技术的不同点。

    第二个不同点不是定义形式的不同,但是也同样重要。(The second difference is less of a defined formal difference, but is just as important, if not more so in practice)。

类别:函数
绑定:晚绑定
支持语言:几乎全部
理解
首先是匿名函数,其次是运行期间有独立的上下文,这个上下文与定义它的环境隐式绑定,第三三,书写方式不同。
语义:一类计算,它不仅根据显式参数求值,同时针对域的相关上下文求值。
可靠性:危险
何时使用:A:如果未隐式绑定上下文,则当匿名函数使用;
B:如果绑定上下文,当“自适应”函数使用,即函数适应不同的实例进行计算求值。但是要将其所适应的上下文明确,个人建议对应的变量命名应该是:函数名+By+上下文名+常量名。
如果把值作为名称的一部分,会遇到当引用的具体常量值发生变化时,会遇到需要重构的情况。所以应该定义出一个常量,比如“工资大于1200”,1200这个值一般来说有个意义。
C:持续求值??:当应用域变量会根据域的上下文变化时,将变量定义为闭包的引用可以实现每次使用该变量时重新根据上下文进行计算。



你可能感兴趣的:(C++,c,C#)