我试图弄清楚如何使用 clojure 中的 REPL 工具提高工作效率,但我发现命名空间在 lein 项目中的工作方式有点棘手。
当我设置命名空间时,例如:
(ns example-ns.core
(:require [clojure.java.jdbc :as sql]))
然后在其中声明一些函数(对于这篇文章的上下文来说到底什么并不重要)。
(defn insert-something! [blah]
(sql/insert! db :tablename blah))
如果我尝试从这个命名空间中引用某些东西,我必须每次都手动编译我想要的所有东西。
(ns example-ns.other
(:require [example-ns.core :refer [insert-something!]]
[clojure.java.jdbc :as sql]))
如果我尝试这样的事情,它会告诉我
insert-something!
不可用,除非,我进入 example-ns.core
并手动编译它。这是必要的吗?还是我错过了一些基本的东西?
当我学习初步的东西时,这没什么大不了的,但现在它变得无法使用,因为随着项目的发展,我一遍又一遍地手动重新编译成吨的东西。
这是在带有 Proto REPL 插件的 Atom 文本编辑器中的 lein 项目的上下文中。
最佳答案
我建议查看 test-refresh
.它可以帮助您自动重新编译项目的必要部分,然后重新运行单元测试:
https://github.com/jakemcc/lein-test-refresh
不要在 repl 中输入一些东西,只需将其转换为单元测试(即使它只是一个 println
语句)。然后,test-refresh
将为您编译并运行它,它与 repl 体验非常相似(但在我看来要好得多)。
关于Clojure 和 Atom Proto REPL : Do you always have to manually compile functions from a namespace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51027908/