5

In clojure I can use defnk to get named parameters. How can I achieve the same thing in ClojureScript?

1

1 Answer 1

11

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

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for the answer. But now I'm really confused. Why has defnk been put into Clojure then?
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.
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.)
is there a way to use a keyword argument like :do-logs and then use something like (when do-logs ...) within the body?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.