2012-07-03 21 views
1

假設我有一個代碼文件,其中包含ns - (ns abc.a)。現在我開始我的repl,並且在ns-(use-ns'abc.a)中。在repl中重新加載ns

現在,如果我更改文件中的任何代碼,我該如何重新加載ns中的repl?

感謝, 穆爾塔扎

回答

4

您可以用(require :reload 'abc.a)(require :reload-all 'abc.a)重新加載代碼。後者也重新加載了所有必需的命名空間abc.a而前者僅重新加載abc.a

1

當您設置一個命名空間中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

+0

謝謝,但是不能熱重新加載代碼? – murtaza52

+0

配置emacs + slime後,只需點擊'C-x C-e'即可獲得剛寫入的代碼。我認爲人們並不認爲這需要更快,所以我不希望有任何自動的代碼自文件重新加載工具。但是,如果你想要一個 - 繼續尋找。 –

2

您可以使用load-file重新加載文件。

+0

有趣的是,load-file沒有在[lien] REPL(Ubuntu 10.04)中設置我的名字空間。我的意思是,如果我開始lein repl,ns是用戶,但是如果我使用(load-file src/xml_lib/core.clj)加載我的文件,則ns不會更改。我必須發出(ns xml_lib.core)。 – octopusgrabbus

1

使用emacs和粘液時,您可以按ctrl-c ctrl -l至重新加載currend名稱空間並重新加載它包含的任何內容。