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

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

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 清单 1. 简单的闭包defmultiply={x,y->returnx*y}//closuredefp=multiply.call(3,4)//explicitcalldefq=multiply(4,5)//implicitcallprintln"p:${p}"//p


清单 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 这个值代替了。

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

Tags:实战 Groovy curry

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