« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9690237 建立时间:2004年12月20日 |

| |
[脚本语言]闭包的简单应用  原创空间, 文章收藏, 软件技术, 电脑与网络
邢红瑞 发表于 2006/5/25 15:37:32 |
闭包是可以用作函数参数和方法参数的代码块,现在很多语言,例如c#,ruby,groovy都加入了闭包,但是Java 社区至今仍抵制对它的使用。Ruby 中的闭包3.times {puts "Inside the times method."}groovy中的闭包current = 1next = 110.times {print current + ' 'newCurrent = nextnext = next + currentcurrent = newCurrent}println ''闭包是具有闭合作用域 的匿名函数,被视作一个遵循特别作用域规则且可以用作参数的代码块。times 是作用在对象 3 上的一个方法。它执行三次闭包中的代码。{puts "Inside the times method."} 是闭包。它是一个匿名函数,times 方法被传递到该函数。ruby不含闭包的循环for i in 1..3 puts "Inside the for method."endgroovyfor (i in 1..3 ) println i
Ruby 添加到这个简单代码块的第一个扩展是一个参数列表。方法或函数可通过传入参数与闭包通信。在 Ruby 中,使用在 || 字符之间用逗号隔开的参数列表来表示参数,例如 |argument, list|。用这种方法使用参数,可以很容易地在数据结构(如数组)中构建迭代。ruby使用了集合的闭包 ['lions', 'tigers', 'bears'].each {|item| puts item}groovydef list = [1, 2, 3, 4]list.each{ println it }ruby将参数传给闭包animals = ['lions', 'tigers', 'bears'].collect {|item| item.upcase}puts animals.join(" and ") + " oh, my."
groovydef greeting = 'Hello'def clos = {param -> println "${greeting} ${param}"}clos.call('world')// Now show that changes to this variable change the closure.greeting = 'Welcome'clos.call('world')第一行代码提取数组中的每个元素,并在此基础上调用闭包,然后用结果构建一个集合。第二行代码将所有元素串接成一个句子,并用 " and " 加以分隔。匿名函数都只不过是一个没有名称的函数,它被就地求值,基于定义它的位置来决定它的上下文。但如果含闭包的语言和不含闭包的语言间惟一的区别仅仅是一点语法上的简便- 即不需要声明函数.
Java 语言本身还没有正式支持闭包,但它却允许模拟闭包。可以使用匿名的内部类来实现闭包。和 Ruby 使用这项技术的原因差不多,Spring 框架也使用这项技术。为保持持久性,Spring 模板允许对结果集进行迭代,而无需关注异常管理、资源分配或清理等细节,从而为用户减轻了负担。下面例子取自于 Spring 框架的示例petclinc JdbcTemplate template = new JdbcTemplate(dataSource);final List names = new LinkedList(); template.query("SELECT id,name FROM types ORDER BY name", new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { names.add(rs.getString(1)); } }); 很早以前我认为学好c/c++和java就搞定了一切,现在发现必须学习其他方法和语言,来改变编写 Java 代码的方式,影响 Java 编程。
|
|
|