我需要略微推廣子類中的默認插槽值。覆蓋:子類中的類插槽的INITFORM
例子:
(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原理不矛盾)。 CLASS-B
覆蓋:INITFORM
的最佳方法是什麼?
- 我能爲
CLASS-B
添加INITIALIZE-INSTANCE :AFTER
,看看是否SLOT-1
設置爲#'IDENTITY
和覆蓋它。 - 如果我在
CLASS-B
中再次引入SLOT-1
,會發生什麼情況?我想避免它,因爲我不得不重複所有的插槽信息。
你應該可以在子類中只添加新的':INITFORM'來添加'SLOT1'(不需要重複其他任何事情)。根據[spec](http://www.lispworks.com/documentation/HyperSpec/Body/07_ec.htm),使用最具體的initform。 – jkiiski
另請參見default-initargs – coredump