Почему я не вижу свои созданные макросом функции в новом сеансе слизи? (кложур)

В моем коде clojure есть несколько функций, которые создаются с помощью вызовов пользовательских макросов. Как правило, макросы берут какую-то структуру данных и создают из нее метод.

Это надуманный пример:

(create-function {:name "view-data" ...})

который создаст новую функцию с именем view-data. (Мои запросы к базе данных управляются данными, поэтому я могу создать функцию с ориентировочным именем, которая вызывает определенный запрос)

Моя проблема в том, что когда я запускаю цель mvn clojure:swank и подключаюсь к сеансу слизи из emacs, эти функции не видны. Я должен посетить файл и скомпилировать его самостоятельно с помощью C-c C-k для создания функций.

Вывод maven предполагает, что сами файлы компилируются нормально, но сеанс слизи не знает о функциях.

Любые идеи, почему это может происходить?


person Pieter Breed    schedule 18.03.2011    source источник


Ответы (2)


У меня есть файл в моем проекте, который requires все пространства имен, что делает все функции отовсюду доступными в repl. возможно, есть более элегантный способ сделать это, но этот лайфхак оказался для меня очень надежным.

person Arthur Ulfeldt    schedule 18.03.2011

Обратите внимание, что в clojure компиляция и загрузка — это отдельные шаги. Вы можете сгенерировать все файлы классов, которые вам нравятся, но если они не загружены, это не повлияет на запущенный процесс.

Я недостаточно знаю о clojure:swank для maven, но мне кажется, что, как и leiningen, цель swank только установит путь к классам для вашего проекта и загрузит код swank, но не какой-либо код в вашем проекте. Таким образом, после этого вам все равно придется загружать свой код каким-либо образом (например, из Emacs/SLIME, используя какую-либо другую цель/плагин или из REPL).

person Joost Diepenmaat    schedule 18.03.2011