Common lisp Override:子类中类槽的INITFORM
我需要稍微概括一下子类中的默认插槽值 例如:Common lisp Override:子类中类槽的INITFORM,common-lisp,clos,Common Lisp,Clos,我需要稍微概括一下子类中的默认插槽值 例如: (defclass class-a () ((slot-1 :initarg :slot-1 :initform #'identity) <...> other-slots<...>)) 但是,#“IDENTITY作为默认值不够好,稍微更一般一些 (lambda (&rest x) x) 将更适合,因为它期待多个参数(我认为它不违背利斯科夫原则)。对于B类,重写:INITFORM的最佳方法是什么 我可以为
(defclass class-a ()
((slot-1 :initarg :slot-1 :initform #'identity)
<...> other-slots<...>))
但是,#“IDENTITY
作为默认值不够好,稍微更一般一些
(lambda (&rest x) x)
将更适合,因为它期待多个参数(我认为它不违背利斯科夫原则)。对于B类
,重写:INITFORM
的最佳方法是什么
CLASS-B
添加INITIALIZE-INSTANCE:AFTER
,查看SLOT-1
是否设置为#IDENTITY
并覆盖它CLASS-B
中重新引入SLOT-1
,会发生什么?我想避免它,因为我必须重复它的所有插槽信息不。唯一的区别是。在easy alternative中,对类使用
:default initargs
,而不是对插槽使用:initform
。在这种情况下,您只需为子类中的该插槽提供一个新的默认initarg。有关:default initargs
的信息,请参见,有关示例,请参见。您只需在子类中添加新的:INITFORM
,即可添加SLOT1
(无需重复任何其他操作)。根据,使用的是最具体的initform。另请参阅默认initargsGood know!以前从未见过:IDEFAULT-INITARGS
。谢谢
(lambda (&rest x) x)