: перезагрузить все и существующие ссылки - PullRequest
0 голосов
/ 21 марта 2011

Я только что обнаружил интересную особенность :reload-all. Скажи, что у меня есть:

(defn clock-update [clock] (swap! clock (fn [previousTime] (+ previousTime 1) )  )   )
(def threads  (Executors/newScheduledThreadPool 16))
(defn start-clock [clock] 
        (. threads scheduleAtFixedRate 
        #(clock-update clock) 0 1 TimeUnit/SECONDS ))

и я (start-clock clock), где часы - это атом, который я наблюдаю, ХОРОШО, если я тогда поменяю атомный обмен! функция (скажем, изменить + для -) в clock-update и (use :reload-all 'myns), а затем угадать, что эта функция используется для обновления атома для существующих потоков! Я этого не ожидал. Я думал, что существующие потоки будут продолжать ссылаться на любую функцию, с которой они были созданы.

1 Ответ

1 голос
/ 21 марта 2011

Как объясняется в документации

def всегда применяется к корневой привязке, даже если var привязан к потоку в точке, где вызывается def.

...