0

次のような関数を書きたいと思いますapply_tuple

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

戻り値:

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

Groovyでこれを行うにはどうすればよいですか?

4

1 に答える 1

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ください。これは、まさにそれを行うさらに短いバージョン(ただし、読みにくいIMHO)です。

def apply_tuple(t, f) {
    t.inject(f) { c, o -> c.curry(o) }
}
于 2013-05-27T09:33:41.443 に答える