defonce

added
1.0

ns
clojure.core

type
macro

(defonce name expr)

defs name to have the root value of the expr iff the named var has no root value,
else expr is unevaluated

                user> (defonce foo 5)
#'user/foo

user> foo
5

;; defonce does nothing the second time
user> (defonce foo 10)
nil

user> foo
5
            
                ;; Supports ^:private
user=> (defonce ^:private foo 3)
#'user/foo
user=> foo
3
user=> (in-ns 'user2)
user2=> user/foo
        java.lang.IllegalStateException: var: user/foo is not public