groovy 闭包实战教程
groovy 闭包实战教程
简单示例
def doubling = {arg1 -> println arg1*2 } println(doubling(5)) -- result is 10 上面代码也可以简化,默认闭包只有一个参数可以省略,用关键字it代替。 def doubling = { println it*2 } 闭包应用1————遍历
grovvy常用的接受闭包的方法有each、collect、find等。 each方法在Groovy JDK中的java.lang.Object中,其参数为闭包,实现对集合的每个成员做确切的功能。上面代码对应的java代码如下: List<Integer> list = Arrays.asList(1,3); for (Integer it :list) { System.out.println(it); } 闭包应用2————重构
class ExpensiveResource { def open() { println 'opened!' } def writeData(data) { println "data written! $data" } def close(){ println 'closed!'} } 为了使用这个类,代码如下: def e = new ExpensiveResource() try { e.open() println e.data } finally { e.close() } 每次使用该资源是,open和close方法都必须被调用,使用闭包重构。 def safeResource(Closure closure) { def resource = new ExpensiveResource() try { resource.open() closure(resource) } finally { resource?.close() } } safeResource { it -> it.writeData('hello world!') } safeResource 方法接受闭包,封装资源管理代码,分离调用代码,使意图更清晰。 groovy采用了类似方法处理文件访问。通过闭包自动实现了打开、关闭、异常处理等场景。 实现函数式编程
下面的闭包实现过滤list的元素。 def filterList = { filter,list -> list.findAll(filter) } 然后定义两个实现过滤逻辑的闭包。 def even = { it % 2 == 0 } def odd = { !even(it) } 最后,我们创建两个新的闭包,通过在原闭包上使用curry函数。实现对偶数、奇数的过滤。 def evenFilterList = filterList.curry(even) def oddFilterList = filterList.curry(odd) assert [0,4,6,8] == evenFilterList(0..8) assert [1,5,7] == oddFilterList(0..8) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |