Groovy 将元组作为闭包的参数传递

Groovy 将元组作为闭包的参数传递,groovy,functional-programming,Groovy,Functional Programming,我想编写一个函数apply\u tuple,这样: apply_tuple(new Tuple(x1, x2, ... , xn), f) 返回: f(x1, x2, ... , xn); 如何在groovy中实现这一点 def apply_tuple(Tuple t, Closure f) { // inject is just a groovy name for the typical 'fold' Closure argumentsApplied = t.inject(

我想编写一个函数
apply\u tuple
,这样:

apply_tuple(new Tuple(x1, x2, ... , xn), f)
返回:

f(x1, x2, ... , xn);
如何在groovy中实现这一点

def apply_tuple(Tuple t, Closure f) {
    // inject is just a groovy name for the typical 'fold'
    Closure argumentsApplied = t.inject(f) { Closure c, Object tx ->
        c.curry(tx)
    }
    argumentsApplied()
}
或者,如果您不是要对
f
求值,而是要对结果函数感兴趣,那么只需删除
参数末尾的
()
。下面是一个更简短的版本(但可读性较差的IMHO),它只实现了以下功能:

def apply_tuple(t, f) {
    t.inject(f) { c, o -> c.curry(o) }
}

我想你误解了我的问题。仔细看一看我想要的结果,特别是把一个元组作为一个参数。然后请更具体地考虑你想要的结果。我提出的解决方案在哪些方面不符合您的要求?您既不希望f的结果作为参数应用于元组的元素,也不希望函数的第一个参数固定为元组的元素。那还有什么呢?我只是在你的问题中没有看到第三个选项。你想让它返回应用了元组但未执行的闭包吗?