加载lisp宏时出错:错误:找不到名为ENTITY的类。执行时:FIND-CLASS,进程监听器(4)

时间:2015-10-23 06:48:33

标签: macros lisp common-lisp ccl

我收到此错误:

  

错误:找不到名为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“filename”)加载包含此宏的文件或直接编译它。

在帮助我了解正在发生的事情并解决问题时,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题是宏AFTer这个,我称之为def-post-entity。这也是一个宏观,我忘了这意味着def-post-entity也会在那里扩展 Coredumps评论让我弄清楚了。