5

我建立了一个 leiningen 项目。在其中一个 clojure 源文件中,我定义了一些记录。我的工作流程通常是启动 emacs 并连接到 'lein swank' REPL。连接到 REPL 后,我切换到适当的名称空间并 Cc Ck 一个文件,这样我就可以开始使用 REPL 和文件中的代码了。但是,如果我对该文件中的记录进行更改并 Cc Ck 它,REPL 不会获取更改。

因此,就目前而言,每次我需要对记录进行更改时,我都必须停止 lein swank 进程,重新启动它,然后从 emacs 重新连接到它。这很快就变老了。我错过了什么?我尝试过 Cc Cl 而不是 Cc Ck,但这不起作用。我试过删除项目根目录中的“类”目录,但这也是不行的。

我将不胜感激任何见解或建议。

另外,顺便说一句,我总是在定义记录的命名空间中工作。

编辑:我实际上正在更改 defrecord 中协议的实现。一旦我更改它并使用 Cc Ck 编译,并在 REPL 中创建新记录,REPL 仍然使用旧协议实现。

4

1 回答 1

4

我可以举一个例子,但也许您正在更改记录的定义并查看更改前的某些记录的实例?

如果您从 repl 定义记录的实例,然后更改 defrecord,重新加载 repl,然后用不同的名称创建一个新的,您可以看到两个副本以及它们之间的差异。

我试图通过在我的项目中调用一个文件来避免这种混淆,(use :reload-all ... all the namespaces in my project ...)然后我可以只重新加载这个文件,并且 reload-all 会抛出旧的 var 绑定等。

于 2011-03-23T17:43:33.920 回答