结构在标准CL中非常静态 - 例如,重新定义结构的效果是不确定的。如果我们可以按插槽名称访问结构,那么它也是未定义的。存在的插槽读取器功能和支持使用它们 setf 。
setf
假设我们有一个结构类型:
(defstruct node fox)
然后,当我们想要更改结构的一个组件时,我们需要传递一个设置该组件的函数:
(defun pass-comp (node setter-fn) (funcall setter-fn node 1) node)
然后我们可以传递一个setter函数:
(let ((my-node (make-node))) (pass-comp my-node (lambda (node new) (setf (node-fox node) new))) (node-fox my-node))