2013-05-27 109 views
0

我想編寫一個函數apply_tuple,使得:傳遞一個元組作爲參數的封閉

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

返回:

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

我怎樣才能做到這一點在Groovy?

+0

你想它返回的封閉應用但未執行的元組? – Will

回答

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) } 
} 
+0

我想你已經誤解了我的問題。仔細查看我想要的結果,特別是關於將Tuple作爲參數。 – Clinton

+0

然後請更具體地關於你想要的結果。我建議的解決方案以何種方式不符合您的要求?你既不希望將f的結果作爲參數應用於元組元素,也不希望將第一個參數固定爲元組元素的函數。那麼還有什麼呢?我只是在你的問題中看不到第三個選項。 – jaetzold