2012-01-03 41 views

回答

10

在ClojureScript命名ARGS功能是相同的Clojure:

(defn f [x & {:keys [a b]}] 
    (println (str "a is " a " and b is " b))) 

(f 1) 
; a is and b is 

(f 1 :a 42) 
; a is 42 and b is 

(f 1 :a 42 :b 108) 
; a is 42 and b is 108 

如果你想默认值,然后改变原来到:

(defn f [x & {:keys [a b] :or {a 999 b 9}}] 
    (println (str "a is " a " and b is " b))) 

(f 1) 
; a is 999 and b is 9 

这与漂亮的答案对于Clojure - named arguments

+0

感谢您的回答。但现在我真的很困惑。为什么defnk已经投入到Clojure中呢? – Zubair 2012-01-03 19:04:21

+0

默认情况下,clojure中没有这种东西。它可能包含在clojure.contrib中(不知道它是否是这样),但是这种宏在标准clojure库中不存在。 – 2012-01-03 20:07:10

+3

'defnk'在clojure.contrib中定义。它是在Clojure 1.2添加完整的地图解构绑定之前创建的。 'defnk'现在应该被认为是过时的(事实上单片clojure.contrib与Clojure 1.3不兼容) – 2012-01-19 22:03:27

相关问题