Почему я не вижу свои созданные макросом функции в новом сеансе слизи? (Clojure) - PullRequest
2 голосов
/ 18 марта 2011

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

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

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

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

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

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

Есть идеи, почему это может происходить?

Ответы [ 2 ]

1 голос
/ 18 марта 2011

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

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

1 голос
/ 18 марта 2011

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

...