我在向代碼寫入代碼時發現,編寫代碼的時候,編譯過程中兩次執行文件的主體。是否有一個原因?這是特定的leiningen?我不能用(compile ...)
來重現這一點。用leiningen評估clojure文件的時間和次數?
簡體版:
(ns foo.core
(:require foo.bar))
;; empty
(ns foo.bar)
(println "hello")
$雷音編譯:所有
編譯foo.core
hello
編譯foo.bar
hello
進一步的測試表明,命名空間編譯過程中其本身上重新加載:
(ns foo.bar)
(declare wasd)
(println wasd)
(def wasd 2)
$雷音乾淨
$雷音編譯:全部
編譯foo.core
#<Unbound Unbound: #'foo.bar/wasd>
運行或啓動時編譯foo.bar
2
在更復雜的情況下,我必須編譯期間這種情況的發生,再一次時間來自lein的回報。我不知道爲什麼。這一切都與clojure 1.6和leiningen 2.5.0。
我不明白。爲什麼「強制每次加載一個名稱空間」意味着「名稱空間將被重新加載」? – Mars 2014-11-22 06:51:12
如果命名空間A需要B,爲了加載A,必須首先加載B.因此,如果您首先加載A然後加載B,則加載A將加載B,然後您將導致B被重新加載。 – arrdem 2014-11-22 08:01:55
這似乎是正確的。檢查[編譯任務]的源代碼(https://github.com/technomancy/leiningen/blob/master/src/leiningen/compile.clj),它只是依次在每個文件上調用'clojure.core/compile' 。我認爲背後有更多的「大腦」。 – metatheorem 2014-11-22 13:34:06