传递一个元组作为闭包的参数

时间:2013-05-27 03:41:24

标签: groovy functional-programming

我想写一个函数apply_tuple,这样:

apply_tuple(new Tuple(x1, x2, ... , xn), f)

返回:

f(x1, x2, ... , xn);

我怎么能在groovy中做到这一点?

1 个答案:

答案 0 :(得分:0)

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,而是对结果函数感兴趣,那么只需删除()末尾的argumentsApplied即可。这是一个更短的版本(但不太可读的恕我直言),只做到了这一点:

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