Как я подключаю clojure исходный файл к выполнению clojure repl на Emacs?

Я в настоящее время нахожусь в процессе добавляющей функциональности к существующему веб-приложению J2EE в контейнере Tomcat, и я пишу моему дополнительному использованию Clojure. Моя установка проста: Я просто добавляю вызовы к статическим методам, сгенерированным clojure, и кодирую всю тяжелую работу с clojure стороны. Процесс сборки состоит в компиляции clojure код (lein uberjar) и затем компиляция кода Java с этим раздражает путь к классу.

В веб-приложении init, у меня есть вызов к сгенерированному классу, который включает шикарный сервер с a (swank/start-repl). Я хотел бы смочь подключить слизь своего Aquamacs к тому серверу и работать в интерактивном режиме оттуда (в какой-то степени, я не попробую ничего, что требует перекомпиляции стороны Java). Но у меня есть ситуация, что я не вполне понимаю. Если я делаю a \M-x slime-connect, Я получаю подсказку REPL (будучи уведомленным это, там не нижний процесс шепелявости, который я думаю, что она в порядке, так как нижний процесс шепелявости выполняет снаружи emacs управление). Я могу оценить формы отлично, и я могу даже осмотреть вещи как my.own.namespace/my-var. Однако, если я посещаю файл с уже скомпилированным кодом clojure, я, может казаться, не заставляю слизь распознать его как свой источник. Рассмотрите простой clojure файл:

(ns my.namespace
  (:gen-class
   :name my.namespace
   :methods [#^{:static true} [testFunc [] void]]))

(def *secret* "shhhh")

(defn -testFunc []
  (println (str "our secret is: " secret)))

Предположение, что это было скомпилировано и включено в uberjar, загруженный веб-приложением, я могу оценка/осматривать my.namespace/*secret*. Но Если я пробую к оценке в буфере кода, Slime думает, что я иду user пространство имен (который может даже иметь смысл!). Но теперь меня оставляют с единственной рабочей опцией - я должен оценить - один за другим, все формы в файле! \C-c \C-l (загрузка исходного файла), не сделает, ничто - по-видимому, просто не возвращает ноль и не производит ничто иное. Компиляция всего, кажется, делает просто, что - она компилирует, выставочные ошибки, если она находит их, но не изменит мое пространство имен. И самое странное \C-~ (синхронизируйте пакет и каталог), какое использование языка Common LISP он делает, что я хочу, но здесь замораживает clojure REPL навсегда.

Всегда существует опция переключения на REPL, ввода (in-ns 'my.namespace), и затем все работы правильно. Но это просто не достаточно практично, когда clojure файлы растут в числе (поскольку пространство имен буфера кода не изменится автоматически!)

Мой вопрос, затем, испытываю ли я недостаток в основной команде/конфигурации - или если существует очевидная причина этого поведения для случая как таковая.

5
задан Edgar 12 August 2010 в 18:56
поделиться