![](/img/trans.png)
[英]clojure.repl namespace lost after clojure.tools.namespace refresh-all
[英]clojure.tools.namespace.repl/refresh not working
我有這個clojure文件:
(ns foo.core)
(def bar 1)
而這個project.clj:
(defproject foo "version"
:dependencies [[org.clojure/clojure "1.6.0"]]
:main foo.core)
我打開一個終端並運行lein repl。 然后我改變了repl的bar OUTSIDE的值。
(def bar 1)
至
(def bar 2)
我在編輯器上更改了這個值,不要忘記保存文件。 然后我在repl中運行命令(load-string“(clojure.tools.namespace.repl / refresh)”)我在repl中鍵入bar並仍然得到1而不是2.但是如果你只是運行(clojure.tools。 namespace.repl / refresh)然后查詢你得到的bar的值2.為什么會這樣? 為什么函數load-string打破它?
顯然,在project.clj
指定一個:main
強制項目使用AOT來打破這個。
這不是你調用refresh
,而是你調用它時的方式。
refresh使用文件上的時間戳來查看何時需要重新加載它們。 這樣它只會重新加載它需要的東西。 因為在通過repl重新定義var之后沒有更改文件,所以它跳過加載該文件。
如果我從這樣的文件開始:
(ns bla.core)
(def bar 3)
然后第一次調用刷新:
bla.core> (load-string"(clojure.tools.namespace.repl/refresh)")
:reloading (bla.core bla.core-test)
:ok
然后重新定義repl中的bar:
bla.core> (def bar :changed-from-repl)
#'bla.core/bar
並再次刷新:
bla.core> (load-string "(clojure.tools.namespace.repl/refresh)")
:reloading ()
:ok
我們可以看到它沒有重新加載任何名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.