定义
闭包Closure是词法闭包Lexical Closure的简称是引用 了自由变量的函数这个被引用的自由变量将和这个函数一同存在即使已经离 开了创造它的环境也不例外所以有另一种说法认为闭包是由函数和与其相关 的引用环境组合而成的实体闭包在运行时可以有多个实例不同的引用环境和 相同的函数组合可以产生不同的实例
闭包的用途
因为闭包只有在被调用时才执行操作即“惰性求值”所以它可以被用来 定义控制结构例如在Smalltalk语言中所有的控制结构包括分歧 条件(if/then/else)和循环(while和for)都是通过闭包实现的用 户也可以使用闭包定义自己的控制结构
闭包可以用来实现对象系统
闭包的实现. 典型实现方式是定义一个特殊的数据结构保存了函数地址指针与 闭包创建时的函数的词法环境表示那些nonlocal变量的绑定使用函数调 用栈的语言实现闭包比较困难因而这也说明了为什么大多数实现闭包的语言是 基于垃圾收集机制 闭包的实现与函数对象很相似这种技术也叫做lambda lifting 。
三、在the joy of clojure中看到了如下几种用法:
--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“CN-Clojure”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到cn-clojure+...@googlegroups.com。
要发帖到此群组,请发送电子邮件至cn-cl...@googlegroups.com。
访问此群组:http://groups.google.com/group/cn-clojure。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/cn-clojure/CAM-tmE-h_7WxVXJ32H1LN%2BjrvwN93thaR%2Bj_4F351vem7Qx6rA%40mail.gmail.com。
要查看更多选项,请访问https://groups.google.com/d/optout。