加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:53:22 所属栏目:Windows 来源:网络整理
导读:我刚刚开始学习Clojure和Emacs.我有运行 Windows的Clojure Box,我希望能够在缓冲区中编写代码然后在REPL中运行它而无需调用 (use 'example.code) 每时每刻.我知道C-c C-k,但它没有重新加载命名空间.如果我使用 (in-ns 'example.code) 更改它运行的repl中的命
我刚刚开始学习Clojure和Emacs.我有运行 Windows的Clojure Box,我希望能够在缓冲区中编写代码然后在REPL中运行它而无需调用

(use 'example.code)

每时每刻.我知道C-c C-k,但它没有重新加载命名空间.如果我使用

(in-ns 'example.code)

更改它运行的repl中的命名空间.这样做的正确方法是什么?

解决方法

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

对我来说最“正确”的方式是(要求'[example.code:as ec])并在REPL的用户命名空间中工作;这样我的一次性实验状态保持在用户和ec / foo对我来说很方便(并且它显然在foo应该来自哪里).您总是可以说(require:reload-all’example.code)(与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))

并说(重用’example.code)来获得与你的命名空间接近一个新的开始. (请注意,1.2新功能,如deftype和defrecord引入了一些复杂性……特别是,unuse对导入的类没有影响 – 这包括记录和deftype创建的类型.:reload-all仍然导致deftype等.要重新编译的表单,但是我记得遇到奇怪的情况,这似乎不够……可能是我的错误,可能是这些功能的一些神秘方面,我还没有完全探索过.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读