Перезагрузите файлы Clojure в emacs

Я только начинаю изучать Clojure и Emacs. У меня есть Поле Clojure для выполнения окон, и я хотел бы смочь написать код в буфере, затем выполняет его в REPL без haveing для вызова

(use 'example.code)

все время. Я знаю о C-c C-k, но он не перезагружает пространство имен. Если я использую

(in-ns 'example.code)

для изменения пространства имен в repl, это работает. Что правильный путь состоит в том, чтобы сделать это?

5
задан Lewis Jubb 13 July 2010 в 11:03
поделиться

2 ответа

in-ns - один из верных путей.

Мне кажется наиболее "правильным" путь (require '[example.code: as ec]) и работа в пространстве имен user в REPL; таким образом мое одноразовое экспериментальное состояние остается в user и ec / foo достаточно удобно для меня (и это делает очевидным, откуда должен взяться foo ) . Вы всегда можете сказать (require: reload-all 'example.code) (то же самое работает с , используйте ) для принудительной перекомпиляции.

Кроме того, вот функция для удаления (из текущего пространства имен) всех отображений, извлеченных из данного пространства имен с помощью , используйте :

(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 не влияет на import ed - сюда входят записи и типы, созданные deftype . : reload-all по-прежнему вызывает перекомпиляцию форм deftype и др., но я помню попадание в странные случаи, когда этого показалось недостаточно ... Возможно, моя ошибка, возможно, какой-то таинственный аспект этих функций, который я еще полностью не изучил.)

10
ответ дан 13 December 2019 в 22:01
поделиться

Может быть, "грязный" способ - просто переключиться на пространство имен буфера в repl с (ns 'example.code) . Грязный потому, что вы смешиваете определения буфера с определениями repl. Я думаю, что ответ Marczyk правильный.

0
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: