From 338e47743548a7ed66d596d24ae6d5e26b09bc7a Mon Sep 17 00:00:00 2001 From: Joe Gallo Date: Thu, 17 Jan 2013 18:11:06 -0500 Subject: [PATCH] new defonce hotness --- src/clj/clojure/core.clj | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 1b72090..88c3362 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -5248,13 +5248,15 @@ `(clojure.core/refer '~'clojure.core ~@filters)) (defmacro defonce - "defs name to have the root value of the expr iff the named var has no root value, - else expr is unevaluated" - {:added "1.0"} - [name expr] - `(let [v# (def ~name)] - (when-not (.hasRoot v#) - (def ~name ~expr)))) + "defs name to have the root value of init iff the named var has no root value, + else init is unevaluated" + {:added "1.0" + :arglists '(symbol doc-string? init?)} + [name & args] + `(let [^clojure.lang.Var v# (ns-resolve '~(ns-name *ns*) '~name)] + (when (or (nil? v#) + (not (.hasRoot v#))) + (def ~name ~@args)))) ;;;;;;;;;;; require/use/load, contributed by Stephen C. Gilardi ;;;;;;;;;;;;;;;;;; -- 1.7.9.5