0

我只是學習Clojure的Python程序員。在Python我愛我如何使用命名參數在調用functools.partial:部分和命名參數Clojure中

def pow(base, exponent): 
    return base ** exponent 

exp = partial(pow, 2.71828)   # exp(2) --> 7.3886 
square = partial(pow, exponent=2)  # square(2) --> 4 

exp的實現是很明顯的Clojure相當於 - 但是我可以用partial定義square簡潔,太?有沒有辦法將關鍵字/命名參數傳遞給partial,以便預先確定一個特定的參數?或者,這不得不由partial來處理,而是函數文字,例如#(pow % 2)

+1

簡短的回答:這是不是習慣。 Clojure傾向於通過參數計數進行調度與JVM可以有效實現的內容有關(解構的成本比較昂貴得多);你從中得到的越多,代碼越受影響。 – 2013-03-27 02:31:14

回答

1

對於現有的功能,你需要,因爲他們沒有使用基於關鍵字參數使用函數文本和使用位置參數。

爲了你自己的功能,你可以做同樣的事情:

(defn my-pow [& {:keys [base exponent]}] 
    (Math/pow base exponent)) 

(def exp (partial my-pow :base 2.71828)) 
(exp :exponent 2) 
(def square (partial my-pow :exponent 2)) 
(square :base 2) 
+0

謝謝。但是現在我*必須*在函數調用中使用關鍵字,不是嗎? '(exp 2)'似乎不起作用。 – embee 2013-03-26 10:40:12

+0

這就是爲什麼我說「類似的東西」;) – Ankur 2013-03-26 11:05:38