尝试编译代码时出现以下错误:
方法#的Lambda列表与泛型函数的列表不兼容 INITIALIZE-INSTANCE。方法的lambda-list:(PAT :: E) 通用功能:(CCL :: INSTANCE& REST CCL :: INITARGS& KEY &安培; ALLOW-OTHER-KEYS)
以下是导致错误的代码:
(defclass event ()
((timestamp
:initarg :timestamp
:accessor timestamp)
(value
:initarg :value
:accessor value)))
(defclass update (event)
((security
:initarg :sectype
:accessor sectype)))
(defclass prc (update)
((lastp
:accessor lastp)
(lastv
:accessor lastv)))
(defmethod initialize-instance :after ((e prc)) ; <- :(
(setf (lastp e) (first (value e)))
(when (second (value e))
(setf (lastv e) (second (value e)))))
任何可能导致错误的提示都会非常感激。
答案 0 :(得分:4)
您需要在参数列表末尾添加&key
到initialize-instance
方法。
引用“Practical Common Lisp”,“17. Object Reorientation:Classes”一章:
参数列表中的
&key
是保持方法的参数列表与泛型函数一致的必要条件 - 为INITIALIZE-INSTANCE
泛型函数指定的参数列表包括&key
以便允许单个方法提供自己的关键字参数,但不需要任何特定的方法。因此,即使没有指定任何&key
参数,每个方法也必须指定&key
。