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