实战 Groovy: 用 curry 过的闭包进行函数式编程
2009-11-19 00:00:00 来源:WEB开发网curry 过的数学 101
从基本数学可能知道,乘法运算符是可交换的(换句话说 x * y = y * x)。但是,减法运算符是不可交换的;所以,需要两个操作来处理减数和被减数。清单 3 为这个目的定义了闭包 lSubtract 和 rSubtract(分别在左边和右边),结果显示了 curry 函数的一个有趣的应用。
清单 3. 右和右操作数def lSubtract = { x, y -> return x - y }
def rSubtract = { y, x -> return x - y }
def dec = rSubtract.curry(1)
// dec = { x -> return x - 1 }
def cent = lSubtract.curry(100)
// cent = { y -> return 100 - y }
def p = dec.call(5) // explicit call
def q = cent(25) // implicit call
println "p: ${p}" // p is 4
println "q: ${q}" // q is 75
迭代和复合
您会回忆起这个系列以前的文章中,闭包一般用于在 List 和 Map 集合上应用的迭代器方法 上。例如,迭代器方法 collect 把闭包应用到集合中的每个元素上,并返回一个带有新值的新集合。清单 4 演示了把 collect 方法应用于 List 和 Map。名为 ages 的 List 被发送给 collect() 方法,使用单个闭包 { element -> return element + 1 } 作为参数。注意方法的最后一个参数是个闭包,在这个地方 Groovy 允许把它从实际参数列表中删除,并把它直接放在结束括号后面。在没有实际参数时,可以省略括号。用名为 accounts 的 Map 对象调用的 collect() 方法可以展示这一点。
- ››Groovy轻松入门
- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
更多精彩
赞助商链接