2013-10-07 4 views
1

EDIT: SOLVED Моя проблема исходила от двух вещей: у меня была ошибка синтаксиса в defmacro. Я удалил его и написал небольшую функцию, к которой я мог бы получить доступ (только после перезапуска repl). Большая вторая проблема заключалась в том, что я был незнаком с тем фактом, что нужно было перезапустить повторный запуск, чтобы признать любые изменения, которые я сделал. Никогда бы не подумал об этом без конкретного ответа ниже =).Поиск пространства имен из lein repl

Я работал над учебником по пьедесталу на github, и он рекомендует тестировать некоторые вещи через repl - моя проблема в том, что я не могу найти пространство имен/макросы или функции, с которыми мне интересно работать.

user=> (require '(junkyard-client.html-templates)) 
nil 
user=> (def t (junkyard-client-templates)) 

user=> CompilerException java.lang.RuntimeException: Unable to resolve symbol: 
    junkyard-client-templates in this context, compiling: 
    (C:\Users\Ben\AppData\Local\Temp\form-init3290053673397861360.clj:1:8) 

Я пробовал другие вещи синтаксически, такие как (требуется «Junkyard-client.html-шаблоны). Это на v2.0.10 в пьедестале учебнике: https://github.com/pedestal/app-tutorial/wiki/Slicing-Templates

EDIT: это то, что я пытаюсь добраться до

(ns junkyard-client.html-templates 
    (:use [io.pedestal.app.templates :only [tfn dtfn tnodes]])) 

(defmacro junkyard-client-templates 
    [] 
    {:junkyard-client-page (dtfn (tnodes "junkyard-client.html" "hello") #{:id}) 
    :other-counter (dtfn (tnodes "tutorial-client.html" "other-counter") #{:id} 
    }) 

проблемной стадии https://github.com/Sammons/clojure-projects/tree/d9e0b4f6063006359bf34a419deb31a879c7a211/pedestal-app-tutorial/junkyard-client

решена этап

ответ

1

require делает пространство имен доступным в вашем текущем пространстве имен, но не делает символы доступными напрямую. Вы все еще должны использовать пространство имен, чтобы присвоить символы, если вы не используете :refer или use.

(require '[junkyard-client.html-templates]) 

(def t (junkyard-client.html-templates/junkyard-client-templates)) 

Может быть предпочтительнее использовать псевдоним пространства имен или использовать специальный символ, который вы используете, для удобства.

Псевдоним:

(require '[junkyard-client.html-templates :as templates]) 

(def t (templates/junkyard-client-templates)) 

См:

(require '[junkyard-client.html-templates :refer [junkyard-client-templates]]) 

(def t (junkyard-client-templates)) 

Примечание:require и :refer, как правило, предпочтительнее, чем use.

+0

Пространство имен по-прежнему необоснованно? user => (require '[junkyard-client.html-templates: as templates]) user => Исключение пространства имен' junkyard-client.html-templates 'не найдено clojure.core/load-lib (core.clj: 5380) Должно быть, я делаю что-то странное. Я начинаю замену из корневого каталога (клиента junkyard), и я могу успешно (без проблем) запускать. Спасибо за этот ответ, хотя он помогает мне более четко понять, как все должно работать. – Catalyst

+0

Попробуйте запустить 'lein repl' из каталога с файлом' project.clj', чтобы он забирал ваши зависимости и конфигурацию. – Jared314

+0

Вот откуда я убегаю, он подключается к проекту и загружает зависимости – Catalyst

Смежные вопросы