我設置了一個leiningen項目。在一個clojure源文件中,我定義了一些記錄。我的工作流程通常是啓動emacs並連接到'lein swank'REPL。一旦我連接到REPL,我切換到適當的命名空間和C-C C-K文件,所以我可以開始使用REPL和文件中的代碼。但是,如果我對該文件中的記錄和C-C C-K中的記錄進行了更改,則REPL不會收到更改。clojure REPL不接受對defrecord進行的更改
因此,每當我需要對記錄進行更改時,我必須停止lein swank進程,重新啓動它,然後從emacs重新連接它。這個變老很快。我錯過了什麼?我試過C-C C-1而不是C-C C-K,但那不起作用。我嘗試刪除項目根目錄中的'class'目錄,但這也是一個禁忌。
我會很感激任何見解或建議。另外,順便說一句,我總是在定義記錄的命名空間中工作。
編輯:我實際上改變了defrecord中協議的實現。一旦我改變它並使用C-C C-k進行編譯,並在REPL中創建新記錄,REPL仍然使用舊的協議實現。
你能在一個貼顯示舊值的repl片段,更改它然後新值。我認爲這將有助於增加背景,這樣我們可以幫助更多 – 2011-03-23 17:40:11
@Arthur:我應該讓這個更清楚。我正在更改defrecord中協議的實現,並且當我做出更改時,REPL仍在使用舊的實現 - 即使在創建記錄的新實例之後。 – mofeeta 2011-03-23 18:13:40
我只知道Common Lisp的Slime/Swank。我很驚訝你不使用'C-c C-c'編譯單獨的頂層表單。順便說一下,有'C-c〜'將REPL的包和目錄切換到當前文件和指針。 – Svante 2011-03-23 23:02:02