实战 Groovy: 用 curry 过的闭包进行函数式编程
2009-11-19 00:00:00 来源:WEB开发网
清单 1. 简单的闭包def multiply = { x, y -> return x * y } // closure
def p = multiply.call(3, 4) // explicit call
def q = multiply(4, 5) // implicit call
println "p: ${p}" // p is 12
println "q: ${q}" // q is 20
这个闭包当然很好,但是我们要对它进行 curry 处理。在调用 curry() 方法时,不需要提供所有的实际参数。curry 过的 调用只引起了闭包的部分应用程序。闭包的 部分应用程序 是另一个 Closure 对象,在这个对象中有些值已经被修正。
清单 2 演示了对 multiply 闭包进行 curry 处理的过程。在第一个例子中,参数 x 的值被设置为 3。名为 triple 的闭包现在有效地拥有了 triple = { y -> return 3 * y } 的定义。
清单 2. curry 过的闭包def multiply = { x, y -> return x * y } // closure
def triple = multiply.curry(3) // triple = { y -> return 3 * y }
def quadruple = multiply.curry(4)
// quadruple = { y -> return 4 * y }
def p = triple.call(4) // explicit call
def q = quadruple(5) // implicit call
println "p: ${p}" // p is 12
println "q: ${q}" // q is 20
可以看到,参数 x 已经从 multiply 的定义中删除,所有它出现的地方都被 3 这个值代替了。
- ››Groovy轻松入门
- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
更多精彩
赞助商链接