如何在 CLOS 中强制执行 slot 的类型。
我知道这(locally (declare (optimize safety))) (defclass foo () ((num :type number...
可能是答案,但我认为它不够便携。(仅适用于 SBCL,不适用于 CLISP 2.49)
或者,我应该实施这些事情吗?(用于检查指定:type
s 之后的每个插槽。)
- 定义方法
:after (setf SLOT)
。 - 定义方法
:after initialize-instance
。
有没有更简单的方法来做到这一点?
而且,钩子“插槽更新”是否有任何“MOP”或元类?
谢谢。
编辑:我认为这与 CLOS 不是同一个问题:如何使插槽具有强制类型的符号向量?,因为我需要有关“元类”或slot-value-with-class
事物的更多信息。
编辑:我发现closer-mop
提供了更可取的便携方式。
CL-USER> (nth 0 (closer-mop:class-slots (find-class 'foo-class)))
CL-USER> (closer-mop:slot-definition-type *)