In clojure I can use defnk to get named parameters. How can I achieve the same thing in ClojureScript?
1 Answer
The named args functionality in ClojureScript is the same as in 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
If you want default values, then change the original to:
(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
This is related to the nice answer for Clojure - named arguments
4 Comments
yazz.com
Thanks for the answer. But now I'm really confused. Why has defnk been put into Clojure then?
Vladimir Matveev
There's no such thing in clojure by default. It may be included in clojure.contrib (don't know if it is), but such macro doesn't exist in standard clojure library.
Alex Stoddard
defnk is defined in clojure.contrib. It was created before Clojure 1.2 added full map destructuring binding. defnk should now be considered obsolete (indeed the monolithic clojure.contrib isn't compatible with Clojure 1.3 going forward.)wirrbel
is there a way to use a keyword argument like :do-logs and then use something like (when do-logs ...) within the body?