我需要稍微概括子类中的默认槽值。
示例:
(defclass class-b (class-a)
((slot-2 :initarg :slot-2 :initform 0)))
它的子类是
#'IDENTITY
但(lambda (&rest x) x)
不足以作为默认值,稍微更为通用
:INITFORM
会更好地适应,因为它期望多个论点(我认为它与Liskov原则并不矛盾)。覆盖CLASS-B
的{{1}}的最佳方法是什么?
INITIALIZE-INSTANCE :AFTER
添加CLASS-B
,看看SLOT-1
是否设置为#'IDENTITY
并覆盖它。SLOT-1
中重新引入CLASS-B
会怎样?我想避免它,因为我必须重复它的所有插槽信息。答案 0 :(得分:6)
如果我在CLASS-B中重新引入SLOT-1会怎样?
有效。
我想避免它,因为我必须为它重复所有的插槽信息。
没有。只有差异。
答案 1 :(得分:4)
简单的替代方法是为班级使用:default-initargs
而不是:initform
作为广告位。在这种情况下,您只需为子类中的该槽提供新的default-initarg。有关:default-initargs
的信息,请参见Chris Riesbeck's rationale,有关示例,请参阅this lisptip。