我正在尝试在(SBCL)Common Lisp 中编写一个小游戏,使用 Quickload 和 ASDF 来定义和管理依赖项。它使用 CLOS,所以我在project
calledclasses
中有一个目录,其中有一个文件locatable.cl
.
LOCATABLE 类的defclass
表单需要一个 LOCATOR 参数,所以我有一行:
:initform (error "Must supply a locator parameter for this class.")
但是,每当我尝试加载此文件或quickload
系统时,都会收到上述错误(“必须为此类提供定位器参数”)。由于我试图定义一个系统而不是创建该类的任何实例,所以我不明白我为什么会得到这个。如果我注释掉错误行,一切都很好,但我被引导相信我拥有它的方式是需要:initval
一个插槽的标准方式。
您如何定义这样的事情,以便您可以加载文件/进行系统定义而不实际发出错误信号?
这是课程 -
(defclass locatable ()
((zone
:accessor zone
:initform nil)
(locator
:initarg :locator
:initform (error "Must supply a locator parameter for this class.")
:allocation :class
:accessor locator)))
更新:我在 REPL 输入了表格并得到了同样的错误。出于好奇,我再次输入了两次,第一次使用:initform ""
,然后使用错误表单。它接受了第一种形式,并没有抱怨第二种形式,所以这个问题似乎不会在重新定义时发生。