可重新加载的 Clojure REPL

Reloadable Clojure REPL

如何为代码可重新加载的 Clojure 创建 REPL?

我可以创建一个新项目,并启动 REPL 运行:

lein new app stack 
cd stack
lein repl
(-main)

完成上述操作后您应该 "Hello, World!"。

我想留在 REPL 中,将代码更改为 println "Howdy partner!",然后再次 (-main)。自动重新加载或(甚至更好)简单的手动重新加载(例如使用像 (r) 这样的命令)将使环境完整。

看来我已经进入了正确的命名空间(除了用户命名空间之外的任何命名空间,您必须从中 (in-ns 'some-ns) 是正确的命名空间!)。唯一未解决的部分是代码重新加载 - 手动或自动。

碰巧我之前问过如何用 做到这一点。

对于手动重新加载,您可以使用引导答案中发布的相同技巧,即具有为您重新加载的功能:

(defn r [] (require 'stack.core :reload)) 

一旦上述函数成为 stack.core 命名空间的一部分,您就可以从 REPL 中调用它。非常简单 - 命名空间 stack.core 中有一个函数可以重新加载自身。

从编辑器中更改代码,使用 (r) 重新加载,然后再次 运行...

还有用于自动重新加载的 lein-autoreload 插件。