Clojure и Atom Proto REPL: всегда ли вам приходится вручную компилировать функции из пространства имен? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь выяснить, как быть более продуктивным с инструментами REPL в clojure, но я нахожу, как пространства имен работают в проекте 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 и не скомпилирую его вручную.

Это необходимо? Или я упускаю что-то фундаментальное?

Это не было большим делом, когда я изучал предварительные вещи, но теперь это становится непригодным для использования, потому что я вручную перекомпилирую тонны материала снова и снова по мере роста проекта.

Это в контексте проекта lein в текстовом редакторе Atom с плагином Proto REPL.

1 Ответ

0 голосов
/ 25 июня 2018

Я бы предложил проверить test-refresh. Это поможет вам автоматически перекомпилировать необходимые части вашего проекта, а затем повторно запустить модульные тесты:

https://github.com/jakemcc/lein-test-refresh

Вместо того, чтобы что-то вводить в реплику, просто приведите его в модульный тест (даже если это просто оператор println). Затем test-refresh скомпилирует и запустит его для вас, и это очень похоже на опыт repl (но, на мой взгляд, намного лучше).

...