假設我有一個代碼文件,其中包含ns - (ns abc.a)。現在我開始我的repl,並且在ns-(use-ns'abc.a)中。在repl中重新加載ns
現在,如果我更改文件中的任何代碼,我該如何重新加載ns中的repl?
感謝, 穆爾塔扎
假設我有一個代碼文件,其中包含ns - (ns abc.a)。現在我開始我的repl,並且在ns-(use-ns'abc.a)中。在repl中重新加載ns
現在,如果我更改文件中的任何代碼,我該如何重新加載ns中的repl?
感謝, 穆爾塔扎
您可以用(require :reload 'abc.a)
或(require :reload-all 'abc.a)
重新加載代碼。後者也重新加載了所有必需的命名空間abc.a
而前者僅重新加載abc.a
。
當您設置一個命名空間中REPL你不從那裏命名空間中定義的文件加載任何代碼。您需要執行文件中的所有代碼(最簡單的方法是複製粘貼)。
所以,如果你的文件是這樣的:
(ns abc.a)
(def x 3)
然後在REPL執行user=>(ns abc.a)
後,你會得到提示abc.a=>
。你的名字空間被改變了,但是它還沒有任何東西。鍵入x
以查看它未定義。只有在執行abc.a=>(def x 3)
之後,才能將代碼加載到REPL中的ns中。
如果您然後在文件中(例如(def x 5)
)更改您的x
定義,只需在REPL中鍵入新的代碼即可重新加載此代碼。
如果您使用的是emacs,我建議您閱讀this question。
您可以使用load-file
重新加載文件。
有趣的是,load-file沒有在[lien] REPL(Ubuntu 10.04)中設置我的名字空間。我的意思是,如果我開始lein repl,ns是用戶,但是如果我使用(load-file src/xml_lib/core.clj)加載我的文件,則ns不會更改。我必須發出(ns xml_lib.core)。 – octopusgrabbus
使用emacs和粘液時,您可以按ctrl-c ctrl -l至重新加載currend名稱空間並重新加載它包含的任何內容。
謝謝,但是不能熱重新加載代碼? – murtaza52
配置emacs + slime後,只需點擊'C-x C-e'即可獲得剛寫入的代碼。我認爲人們並不認爲這需要更快,所以我不希望有任何自動的代碼自文件重新加載工具。但是,如果你想要一個 - 繼續尋找。 –