gpt4 book ai didi

lisp - defstruct - :read-only is not read only

转载 作者:行者123 更新时间:2023-12-04 22:34:17 29 4
gpt4 key购买 nike

在 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 选项定义的结构字段的值。

关于lisp - defstruct - :read-only is not read only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67521705/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com