defstruct-:read-only不是只读的

在我读到的 CLHS 中:read-only x:“当 x 为真时,这指定不能更改此插槽;它将始终包含在构造时提供的值。”

我可以做到这一点(CCL,SBCL):

CL-USER> (defstruct foo
           (one 0 :read-only t))
FOO
CL-USER> (defparameter *foo* (make-foo))
*FOO*
CL-USER> *foo*
#S(FOO :ONE 0)
CL-USER> (setf (slot-value *foo* 'one) 1)
1 (1 bit, #x1, #o1, #b1)
CL-USER> *foo*
#S(FOO :ONE 1)

Lisp 不应该禁止更改此插槽吗?

回答

slot-value不是您访问其类定义为 的对象的字段的方式defstruct。这些对象根本没有可移植的命名槽:它们有命名访问器

一些实现给出了这样的对象名称的字段,并且也可能允许访问它们slot-value:但是这种行为是完全不可移植的。

如果您使用标准定义的语言工作,那么您应该无法修改使用:read-only选项定义的结构字段的值。


以上是defstruct-:read-only不是只读的的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>