5

我正在尝试创建一个可以在 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 中的有效类型......我错了吗?

我怎样才能让它工作?

[编辑]

我遇到的上述问题是在 Emacs 24.2 下的 09-22-2012 Slime 版本中运行 SBCL 1.0.58。当我从命令行运行 SBCL 1.0.58 时,没有问题。这似乎不是 SBCL 问题...

4

2 回答 2

4

您可能会考虑在插槽访问器/写入器上定义一个 :after 方法。此外,可以通过定义自己的元类和自定义 slot-value-using-class 来实现最终程度的控制

于 2013-05-17T06:37:53.347 回答
3

我知道我可能为时已晚,但是您应该围绕您的类声明进行安全优化。例如:

(locally (declare (optimize safety))
    (defclass test-class ()
      ((some-slot :type real :initarg :some-slot :accessor :test-some-slot))))
于 2013-05-03T21:22:12.243 回答