Я получаю эту ошибку:
Ошибка: класс с именем ENTITY не найден. При выполнении: FIND-CLASS, в процессе Listener(4). Введите cmd-/, чтобы продолжить, cmd-. чтобы прервать, cmd-\ для списка доступных перезапусков. Если продолжить: Попробуйте снова найти класс Введите :? для других вариантов.
Когда я загружаю/компилирую файл с этим макросом:
(defmacro def-post-entity (entity)
(let* ((repository-var-name (cl-ddd::repository-var entity))
(base-url (string-downcase (concatenate 'string "/api/" (string entity))))
(progn-statement '(progn)))
(loop
for slot in (ccl:class-slots (find-class entity))
append `(setf (,(ccl:slot-definition-name slot) new-entity)
(cdr (assoc ,(string (ccl:slot-definition-name slot)) params :test #'string=)))
into progn-statement)
`(setf (ningle:route cl::*app* ,base-url :method :post)
(lambda (params)
(let ((new-entity (make-instance ,entity)))
(,progn-statement))))))
Насколько я понимаю макросы lisp (я новичок), у find-class нет причин ожидать, что сущность будет именем класса, это параметр макроса. Сообщение об ошибке указывает, что find-class выполняется, но это не так. Я просто загружаю файл, содержащий этот макрос, через (ql:quickload "имя файла") или компилирую его напрямую.
Буду признателен за любую помощь, которая поможет мне понять, что происходит, и исправить это.
(load "filename")
?quickload
предназначен для загрузки систем, которые могут загружать другие файлы и могут объяснить, почемуfind-class
выполняется. - person coredump   schedule 23.10.2015progn-statement
. Вы скрываете привязку внутриloop
, а затем выбрасываете ее. - person Svante   schedule 23.10.2015def-post-entry
? Используете ли вы переменную с именемentity
в качестве параметра вызова? Поскольку аргумент макроса не оценивается, он должен быть символом, именующим класс, а не переменной, результатом которой является такой символ. - person Terje D.   schedule 25.10.2015