【发布时间】:2012-07-03 15:16:38
【问题描述】:
假设我有一个包含 ns - (ns abc.a) 的代码文件。现在我开始我的 repl 并在 ns- (use-ns 'abc.a) 中。
现在,如果我更改文件中的任何代码,如何重新加载 repl 中的 ns?
谢谢, 穆尔塔萨
【问题讨论】:
假设我有一个包含 ns - (ns abc.a) 的代码文件。现在我开始我的 repl 并在 ns- (use-ns 'abc.a) 中。
现在,如果我更改文件中的任何代码,如何重新加载 repl 中的 ns?
谢谢, 穆尔塔萨
【问题讨论】:
您可以使用(require :reload 'abc.a) 或(require :reload-all 'abc.a) 热重载代码。后者还会重新加载abc.a 所需的所有命名空间,而前者仅重新加载abc.a。
【讨论】:
您可以使用load-file 重新加载文件。
【讨论】:
在 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。
【讨论】:
C-x C-e 即可重新加载您刚刚编写的代码。我不认为人们觉得需要比这更快的任何东西,所以我不希望有任何自动代码从文件重新加载工具。但是,如果你想要一个 - 继续寻找。
使用 emacs 和 slime 时,您可以按 ctrl-c ctrl-l 来重新加载当前命名空间并重新加载其中包含的任何内容。
【讨论】: