What is the difference between def and defonce in Clojure?

What is the difference between def and defonce in Clojure?

When to use def over defonce or vice versa?

+8
functional-programming lisp clojure clojurescript
source share
2 answers

defonce skipped when the variable is already defined.

 user> (def a 1) ;;=> #'user/a user> a ;;=> 1 user> (def a 2) ;;=> #'user/a user> a ;;=> 2 user> (defonce b 1) ;;=> #'user/b user> b ;;=> 1 user> (defonce b 2) ;;=> nil user> b ;;=> 1 
+12
source share

Defonce only associates a name with a root value if the name does not have a root value.

For example, for example, Jay Fields blogs , it can be used together when you want to reload namespaces, but you may not need to reload everything.

 (defonce ignored-namespaces (atom #{})) (defn reload-all [] (doseq [n (remove (comp @ignored-namespaces ns-name) (all-ns))] (require (ns-name n) :reload ))) 
+4
source share

All Articles