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