我有一个leiningen项目。在其中一个clojure源文件中,我定义了一些记录。我的工作流程通常是启动emacs并连接到'lein swank'REPL。一旦我连接到REPL,我切换到相应的命名空间和C-c C-k文件,所以我可以开始使用REPL和文件中的代码。但是,如果我对该文件中的记录和C-c C-k进行更改,则REPL不会接收更改。
所以,就目前而言,每当我需要对记录进行更改时,我必须停止lein swank进程,重新启动它,并从emacs重新连接到它。这变得非常快。我错过了什么?我已经尝试过C-c C-l而不是C-c C-k,但这不起作用。我已经尝试删除项目根目录中的“class”目录,但这也是不行的。
我很感激任何见解或建议。
另外,另外,我总是在定义记录的命名空间中工作。
编辑:我实际上是在defrecord中更改协议的实现。一旦我更改它并使用C-c C-k进行编译,并在REPL中创建一条新记录,REPL仍然使用旧的协议实现。
答案 0 :(得分:4)
我可以使用一个例子,但也许您正在更改记录的定义并查看某些记录的实例,这些记录是在更改之前所做的?
如果您从repl定义记录的实例,然后更改defrecord,重新加载repl,然后创建一个具有不同名称的新副本,您是否可以看到它们之间的副本和差异。
我尝试通过在我的项目中调用(use :reload-all ... all the namespaces in my project ...)
的文件来避免这种混淆,然后我可以重新加载这个文件,并且reload-all抛出旧的var绑定等。