1

次のエラーが表示されます。

エラー: ENTITY という名前のクラスが見つかりません。実行中: FIND-CLASS、プロセス Listener(4) 中。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") 経由でロードするか、直接コンパイルします。

何が起こっているのかを理解し、それを修正するのに役立つ助けをいただければ幸いです。

4

1 に答える 1

1

問題は、def-post-entity と呼ばれるこのマクロの AFTer でした。これもマクロであり、def-post-entity もそこで展開されることを意味することを忘れていました。
Coredumps コメントは、それを理解するのに役立ちました。

于 2015-10-25T14:42:51.380 に答える