你可以通过编写一个闭包来滚动你自己的柯里化功能,该闭包接受另一个闭包和一个柯里化参数来设置,并返回一个使用这个值的闭包。
// Our closure that takes 2 parameters and returns a String
def greet = { greeting, person -> "$greeting $person" }
// This takes a closure and a default parameter
// And returns another closure that only requires the
// missing parameter
def currier = { fn, param ->
{ person -> fn( param, person ) }
}
// We can then call our currying closure
def hi = currier( greet, 'Hi' )
// And test it out
hi( 'Vamsi' )
但是您最好坚持使用jalopaba 所示curry
的内置 Groovy方法。(还有rcurry和ncurry分别从右侧和给定位置咖喱)
应该说,Groovy curry 方法用词不当,因为它更像是部分应用的情况,因为您不需要深入到只需要一个参数的闭包,即:
def addAndTimes = { a, b, c -> ( a + b ) * c }
println addAndTimes( 1, 2, 3 ) // 9
def partial = addAndTimes.curry( 1 )
println partial( 2, 3 ) // 9