ЗАКРЫТЬ: Как сделать так, чтобы слот имел вектор символов принудительного типа?

Я пытаюсь создать класс, который может хранить вектор символов в слоте в 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))))
Другие вопросы по тегам