通用 Lisp 结构中的插槽选项,无需指定任何插槽值



有没有办法为结构槽指定插槽选项而不必为其提供默认值?这可能是有益的,例如,当定义其他结构将从中继承的基础结构时,指定:types或:read-only而不给出初始值,我认为看起来会更好。

以下结构定义会导致错误,因为缺少初始值:

(defstruct s
(x :type number :read-only t)
)

No.defstructdefclass之间的一个(许多(区别是所有结构槽始终都有一个值,不指定默认值等效于指定默认值nil

请注意,

限制对插槽初始化表单和相应插槽的:type选项之间的类型不匹配发出警告是必要的,因为必须指定插槽初始化表单才能指定插槽选项;在某些情况下,可能不存在合适的默认值。

在您的情况下,我建议:

(defstruct s
(x (error "x is required") :type number :read-only t))

在这种情况下,(make-s)将发出错误信号,而(make-s :x 10)将起作用。

相关内容

最新更新