Мне нужно немного обобщить значение слота по умолчанию в подклассе.
Пример:
(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)
подойдет лучше, так как ожидает несколько аргументов (я думаю, что это не противоречит принципу Лискова). Каков наилучший способ переопределить :INITFORM
для CLASS-B
?
- Я могу добавить
INITIALIZE-INSTANCE :AFTER
дляCLASS-B
и посмотреть, установлено лиSLOT-1
значение#'IDENTITY
, и переопределить его. - Что произойдет, если я снова введу
SLOT-1
вCLASS-B
? Я бы хотел избежать этого, так как мне пришлось бы повторять для него всю информацию о слоте.
SLOT1
только с новым:INITFORM
в подклассе (больше ничего повторять не нужно). Согласно спецификации, используется наиболее конкретная форма инициализации. - person jkiiski   schedule 28.07.2016