ЗАКРЫТЬ: Как сделать так, чтобы слот имел вектор символов принудительного типа?
Я пытаюсь создать класс, который может хранить вектор символов в слоте в SBCL. Я не могу понять, как его настроить.
Моя лучшая догадка до сих пор была
(defclass Individual ()
((discrete-decisions :type (vector symbol))))
Это возвращает следующую ошибку:
keyword argument not a symbol:
(DISCRETE-DECISIONS :TYPE (VECTOR SYMBOL)).
[Condition of type SB-INT:SIMPLE-PROGRAM-ERROR]
Некоторые эксперименты показали, что изменение типа просто symbol
возвращает ту же ошибку. я думал так symbol
допустимый тип в Common Lisp... я ошибаюсь?
Как я могу заставить это работать?
[РЕДАКТИРОВАТЬ]
Вышеупомянутая проблема, с которой я столкнулся, заключалась в запуске SBCL 1.0.58 в сборке Slime 09-22-2012 под Emacs 24.2. Когда я запускаю SBCL 1.0.58 из командной строки, проблем нет. Это не похоже на проблему SBCL...
2 ответа
Вы могли бы рассмотреть определение метода:after для доступа / записи слота. Кроме того, максимальная степень контроля может быть достигнута путем определения собственного метакласса и настройки класса использования значения слота.
Я знаю, что, вероятно, слишком поздно, но вы должны обернуть свою декларацию classe с оптимизацией для безопасности. Например:
(locally (declare (optimize safety))
(defclass test-class ()
((some-slot :type real :initarg :some-slot :accessor :test-some-slot))))