在repl中重新加载ns

时间:2012-07-03 07:57:23

标签: emacs clojure

假设我有一个包含ns的代码文件 - (ns abc.a)。现在我开始我的repl并在ns-(use-ns'abc.a)。

现在,如果我更改文件中的任何代码,如何在repl中重新加载ns?

谢谢, 穆尔塔扎

4 个答案:

答案 0 :(得分:4)

您可以使用(require :reload 'abc.a)(require :reload-all 'abc.a)热重新加载代码。后者还重新加载abc.a所需的所有名称空间,而前者仅重新加载abc.a

答案 1 :(得分:2)

您可以使用load-file重新加载文件。

答案 2 :(得分:1)

在REPL中设置命名空间时,不会从定义命名空间的文件中加载任何代码。您需要执行文件中的所有代码(最简单的方法是复制粘贴)。

因此,如果您的文件如下所示:

(ns abc.a)
(def x 3)

然后在REPL中执行user=>(ns abc.a)后,您会收到提示abc.a=>。您的命名空间已更改,但其中没有任何内容。键入x以查看未定义。只有在执行abc.a=>(def x 3)之后,才能将代码加载到REPL中的ns。

如果您随后更改了文件中的x定义(比如(def x 5)),只需在REPL中输入新的定义即可重新加载此代码。

如果您使用的是emacs,我建议您阅读this question

答案 3 :(得分:1)

当使用emacs和slime时,你可以点击ctrl-c ctrl-l来重新加载当前命名空间并重新加载它包含的任何内容。