Я пытаюсь написать небольшую игру в (SBCL) Common Lisp, используя Quickload и ASDF для определения зависимостей и управления ими. Он использует CLOS, поэтому у меня есть каталог в project
под названием classes
, а там есть файл, locatable.cl
.Загрузка файла, который указывает форму ошибки, но получение ошибки
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)))
UPDATE: Я вошел в форму на РЕПЛ и получил ту же ошибку. Для любопытства я дважды ввел его дважды, сначала с :initform ""
, затем с формой ошибки. Он принял первую форму и не пожаловался на вторую, так что эта проблема, похоже, не происходит на re -definition.
Что-то в определении вашей системы должно создавать экземпляр без предоставления правильных аргументов инициализации. – Barmar
Если эта строка сама по себе, на уровне файла, она будет оценивать форму ERROR во время загрузки. Можете ли вы поделиться всей формой DEFCLASS? – Xach
Я добавил определение класса к основному вопросу, Xach, спасибо. @Barmar, это происходит в SLIME, даже если я только пытаюсь загрузить «locatable.cl», в котором нет вызова «make-instance». – amp108