gpt4 book ai didi

clojure REPL 不会获取对 defrecord 所做的更改

转载 作者:行者123 更新时间:2023-12-04 20:22:04 25 4
gpt4 key购买 nike

我建立了一个 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,但这不起作用。我试过删除项目根目录中的“类”目录,但这也是不行的。

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

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

编辑:我实际上正在更改 defrecord 中协议(protocol)的实现。一旦我更改它并使用 C-c C-k 编译,并在 REPL 中创建新记录,REPL 仍然使用旧协议(protocol)实现。

最佳答案

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

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

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

关于clojure REPL 不会获取对 defrecord 所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com