【问题标题】:Weird error when compiling Common Lisp code编译 Common Lisp 代码时出现奇怪的错误
【发布时间】:2017-05-31 14:28:58
【问题描述】:

我在尝试编译一些代码时遇到以下错误:

方法#的Lambda列表与泛型函数的列表不兼容 初始化实例。方法的 lambda-list : (PAT::E) 通用函数的 : (CCL::INSTANCE &REST CCL::INITARGS &KEY &允许其他键)

这是导致错误的代码:

(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)))))

非常感谢任何关于可能导致错误的提示。

【问题讨论】:

    标签: common-lisp clos


    【解决方案1】:

    您需要在参数列表末尾添加&amp;key 到您的initialize-instance 方法。

    引用“Practical Common Lisp”的“17. Object Reorientation: Classes”一章:

    参数列表中的&amp;key 需要保持方法的参数列表与泛型函数的一致——为INITIALIZE-INSTANCE 泛型函数指定的参数列表包括&amp;key,以便允许各个方法提供它们的自己的关键字参数,但不需要任何特定的。因此,每个方法都必须指定&amp;key,即使它没有指定任何&amp;key 参数。

    【讨论】:

      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 2021-04-04
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多