我需要稍微概括一下子类中的默认槽值。
示例:
(defclass class-a ()
((slot-1 :initarg :slot-1 :initform #'identity)
<...> other-slots<...>))它的子类是
(defclass class-b (class-a)
((slot-2 :initarg :slot-2 :initform 0)))但是#'IDENTITY作为默认值还不够好,稍微一般一点。
(lambda (&rest x) x)会更适合,因为它期望多个论点(我认为它不违背Liskov原则)。为:INITFORM重写CLASS-B的最佳方法是什么?
INITIALIZE-INSTANCE :AFTER添加CLASS-B,并查看SLOT-1是否设置为#'IDENTITY并覆盖它。SLOT-1中重新引入CLASS-B,会发生什么情况?我想避免它,因为我将不得不重复所有的插槽信息。发布于 2016-07-28 12:24:51
如果我在B班重新引入第一位会怎么样?
它起作用了。
我想避免它,因为我将不得不重复所有的插槽信息。
不是的。只是区别而已。
发布于 2016-07-28 13:10:47
简单的替代方法是对类使用:default-initargs,而不是对插槽使用:initform。在这种情况下,您只需为子类中的那个时隙提供一个新的默认initarg。有关:default-initargs,请参阅:default-initargs,示例请参阅这个口香糖。
https://stackoverflow.com/questions/38633305
复制相似问题