Skip to content

Instantly share code, notes, and snippets.

@pleasetrythisathome
Created March 13, 2015 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pleasetrythisathome/c00106373f93f8559a27 to your computer and use it in GitHub Desktop.
Save pleasetrythisathome/c00106373f93f8559a27 to your computer and use it in GitHub Desktop.
variadic keyword args or map or no-args
(defn kargs
([] (kargs {}))
([a b & {:as r}]
(kargs (assoc r a b)))
([a] a))
(and (= (kargs :some 1 :me 2)
(kargs {:some 1 :me 2})
{:some 1 :me 2})
(= (kargs)
{}))
;; => true
(defmacro defkargs [name destrt & body]
`(clojure.core/defn ~name
([] (~name {}))
([a# b# & {:as r#}]
(~name (clojure.core/assoc r# a# b#)))
([~destrt]
~@body)))
(defkargs kargs-test {:keys [some me]}
(when (and some me)
(+ some me)))
(and (= (kargs-test :some 1 :me 2)
(kargs-test {:some 1 :me 2})
3)
(= (kargs-test)
nil))
;; => true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment