2016-05-20 42 views

risposta

12

defonce viene saltato quando la variabile è già definita.

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 
4

Defonce associa solo il nome al valore radice se il nome non ha valore radice.

Ad esempio, come ad esempio Jay Fields blogs, può essere utilizzato in congiunzione quando si desidera ricaricare gli spazi dei nomi ma potrebbe non essere necessario ricaricare tutto.

(defonce ignored-namespaces (atom #{})) 

(defn reload-all [] 
    (doseq [n (remove (comp @ignored-namespaces ns-name) (all-ns))] 
    (require (ns-name n) :reload)))