WEB开发网
开发学院软件开发Java 实战 Groovy: 用 curry 过的闭包进行函数式编程 阅读

实战 Groovy: 用 curry 过的闭包进行函数式编程

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: curry 过的数学 101从基本数学可能知道,乘法运算符是可交换的(换句话说 x * y = y * x),实战 Groovy: 用 curry 过的闭包进行函数式编程(3),但是,减法运算符是不可交换的;所以,在没有实际参数时,可以省略括号,需要两个操作来处理减数和被减数,清单 3 为这个目

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() 方法可以展示这一点。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:实战 Groovy curry

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接