2016-05-20 3 views

ответ

12

defonce пропускается, когда переменная уже определена.

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 связывает только имя с корневым значением, если имя не имеет корневого значения.

Например, например, Jay Fields blogs, его можно использовать в сочетании, если вы хотите перезагрузить пространства имен, но вам может не понадобиться перезагрузить все.

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

(defn reload-all [] 
    (doseq [n (remove (comp @ignored-namespaces ns-name) (all-ns))] 
    (require (ns-name n) :reload))) 
Смежные вопросы