CLOS:如何使插槽具有强制类型的符号向量?

时间:2012-09-23 21:41:57

标签: lisp common-lisp sbcl clos

我正在尝试创建一个可以在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问题......

2 个答案:

答案 0 :(得分:3)

您可以考虑在插槽访问器/编写器上定义:after方法。此外,通过定义自己的元类和使用slot-value-using-class定制

,可以实现最终的控制程度。

答案 1 :(得分:2)

我知道我可能已经太晚了,但你应该用优化安全性来包装你的课堂声明。例如:

(locally (declare (optimize safety))
    (defclass test-class ()
      ((some-slot :type real :initarg :some-slot :accessor :test-some-slot))))