闭包的概念、形式与应用
身影,下面的代码就展示了一个 Block:
sum = 0
10.times 表示调用对象10的 times 方法(注 5),紧跟在这个调用后面的大括号里面的部分就是Block.所谓 Block 是指紧跟在函数调用之后用大括号或 do/end 括起来的代码,Block 的开始部分(左大括号或 do)和函数调用在同一行.Block 也可以接受参数,参数列表用两个竖杠括起来放在最前面.Block 会被作为它前面的函数调用的参数,而在这个函数中可以使用关键字 yield 来调用该 Block.在这个例子中,10.times 会以数字0到9为参数调用 Block 10次. Block 实际上就是匿名函数,它可以被调用,可以捕获上下文.语法上要求 Block 出现在函数调用的后面, Block 不能直接作为函数的的返回值.要想从一个函数中返回 Block,使用 proc 或 lambda 函数把 Block 转化为对象才行.详细内容请参考参考资源和3. Python 中的闭包 Python 因其简单易学、功能强大而拥有很多拥护者,很多企业和组织在使用这种语言.Python 使用缩进来区分作用域的做法也十分有特点.下面是一个 Python 的例子:
def addx(x): add8 = addx(8) print add8(100)
def addx(x): add8 = addx(8) print add8(100)
Perl 中的闭包 Perl 是老牌文本处理语言了,在 WEB 开发方面也有一席之地.不过 Perl6 的开发进行比较慢,也许一些用户开始转投其它语言了.下面是一个 Perl 的例子.
sub addx { $add8 = addx(8); print $add8->(100);
Lua 以其小巧和快速的特点受到游戏开发者的青睐,被一些游戏用来定制 UI 或作为插件语言,如果你玩过《魔兽世界》,那你对 Lua 一定不会感到陌生.前面在说明闭包原理时就使用了 Lua,这里就不再给出其他的例子了.更多的内容请参考参考资源. Scheme 中的闭包
Scheme 是 Lisp 的一种方言,被 MIT 用作教学语言.Scheme 属于函数语言,虽然不像命令语言那么流行,却是很多黑客喜欢的语言.很多编程思想起源于函数语言,闭包就是其中之一.一般认为 Scheme 是第一个提供完整闭包支持的语言.下面是一个 Scheme 的例子:
(define (addx x) (define add8 (addx 8)) (add8 100)
闭包的应用 闭包可以用优雅的方式来处理一些棘手的问题,有些程序员声称没有闭包简直就活不下去了.这虽然有些夸张,却从侧面说明闭包有着强大的功能.下面列举了一些闭包应用. 加强模块化 闭包有益于模块化编程,它能以简单的方式开发较小的模块,从而提高开发速度和程序的可复用性.和没有使用闭包的程序相比,使用闭包可将模块划分得更小.比如我们要计算一个数组中所有数字的和,这只需要循环遍历数组,把遍历到的数字加起来就行了.如果现在要计算所有元素的积呢?要打印所有的 |
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |