有没有办法为结构槽指定插槽选项而不必为其提供默认值?这可能是有益的,例如,当定义其他结构将从中继承的基础结构时,指定:type
s或:read-only
而不给出初始值,我认为看起来会更好。
以下结构定义会导致错误,因为缺少初始值:
(defstruct s
(x :type number :read-only t)
)
No.defstruct
和defclass
之间的一个(许多(区别是所有结构槽始终都有一个值,不指定默认值等效于指定默认值nil
。
请注意,
限制对插槽初始化表单和相应插槽的
:type
选项之间的类型不匹配发出警告是必要的,因为必须指定插槽初始化表单才能指定插槽选项;在某些情况下,可能不存在合适的默认值。
在您的情况下,我建议:
(defstruct s
(x (error "x is required") :type number :read-only t))
在这种情况下,(make-s)
将发出错误信号,而(make-s :x 10)
将起作用。