【问题标题】:reloading a ns in repl在 repl 中重新加载一个 ns
【发布时间】:2012-07-03 15:16:38
【问题描述】:

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

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

谢谢, 穆尔塔萨

【问题讨论】:

    标签: emacs clojure


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 有趣的是,load-file 没有在 [lien] REPL (Ubuntu 10.04) 中设置我的命名空间。我的意思是,如果我从 lein repl 开始,ns 是用户,但如果我使用 (load-file src/xml_lib/core.clj) 加载我的文件,则 ns 不会改变。我必须发布(ns xml_lib.core)。
      【解决方案3】:

      在 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

      【讨论】:

      • 配置 emacs+slime 后,只需点击 C-x C-e 即可重新加载您刚刚编写的代码。我不认为人们觉得需要比这更快的任何东西,所以我不希望有任何自动代码从文件重新加载工具。但是,如果你想要一个 - 继续寻找。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 2011-01-29
        • 2022-11-24
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        相关资源
        最近更新 更多