Clojure 和 Atom Proto REPL : Do you always have to manually compile functions from a namespace?

标签 clojure namespaces read-eval-print-loop

我试图弄清楚如何使用 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/

相关文章:

java - 如何从任何地方启动 Clojure REPL?

php - Laravel Controller 不存在

php - 在与 Zend session 中存储产品

capybara - capybara 的 REPL

operators - 为什么 Io REPL 和解释器给我两个不同的值?

c# - httprepl : Cannot start the REPL when output is being redirected

clojure - 更新与向量中的谓词匹配的映射的惯用方法

clojure - 在 Clojure 中 - 如何访问结构向量中的键

php - Phalcon PHP 多模块命名空间定义

java - Clojure中的线程局部变量