【发布时间】:2011-07-21 12:41:07
【问题描述】:
我设置了一个 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 中协议的实现。一旦我更改它并使用 C-c C-k 编译,并在 REPL 中创建新记录,REPL 仍然使用旧协议实现。
【问题讨论】:
-
您能否从显示旧值的 repl 中粘贴一个 sn-p,更改它,然后更改新值。我认为这将有助于添加上下文,以便我们提供更多帮助
-
@Arthur:我应该更清楚地说明这一点。我正在更改 defrecord 中协议的实现,当我进行更改时,REPL 仍在使用旧实现 - 即使在创建记录的新实例之后也是如此。
-
我只从 Common Lisp 知道 Slime/Swank。我很惊讶您不使用
C-c C-c来编译各个顶级表单。顺便说一句,有C-c ~可以将REPL的包和目录切换到当前文件和指向。 -
你能从 repl 和协议定义的前后 sn-ps 中粘贴一个块吗?如果您无法透露来源,也许您可以为同样的问题制作一个人为的例子? ps:clojure是什么版本的
标签: clojure record read-eval-print-loop slime leiningen