gpt4 book ai didi

windows - 在 emacs 中重新加载 Clojure 文件

转载 作者:可可西里 更新时间:2023-11-01 13:28:53 24 4
gpt4 key购买 nike

我刚刚开始学习 Clojure 和 Emacs。我有用于运行 Windows 的 Clojure Box,我希望能够在缓冲区中编写代码,然后在 REPL 中运行它而无需调用

(use 'example.code)

一直以来。我知道 C-c C-k 但它不会重新加载命名空间。如果我使用

(in-ns 'example.code)

在 repl 中更改 namespace 是可行的。执行此操作的正确方法是什么?

最佳答案

in-ns 是正确的方法之一。

我觉得最“正确”的方式是 (require '[example.code :as ec]) 并在 REPL 的 user 命名空间中工作;这样我的一次性实验状态就停留在 userec/foo 对我来说足够方便了(而且它很明显 foo 应该在哪里来自)。你总是可以说 (require :reload-all 'example.code) (同样适用于 use)来强制重新编译。

此外,这里还有一个函数,用于删除(从当前命名空间中)使用 use 从给定命名空间拉入的所有映射:

(defn unuse [ns]
(doseq [[n v] (ns-refers *ns*)]
(if (= (.. v ns name) ns)
(ns-unmap *ns* n))))

在此之上你可以构建

(defn reuse [ns]
(unuse ns)
(remove-ns ns)
(use :reload-all ns))

然后说 (reuse 'example.code) 来让您的命名空间重新开始。 (请注意,deftypedefrecord 等 1.2 新功能引入了一些复杂性...特别是,unuseimport 没有影响ed 类 -- 这包括记录和 deftype 创建的类型。:reload-all 仍然会导致 deftype 等形式重新编译,但我记得遇到过奇怪的情况,这似乎还不够……可能是我的错误,可能是这些功能的一些神秘方面我还没有完全探索。)

关于windows - 在 emacs 中重新加载 Clojure 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com