首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖:子类中类槽的INITFORM

覆盖:子类中类槽的INITFORM
EN

Stack Overflow用户
提问于 2016-07-28 10:08:05
回答 2查看 289关注 0票数 2

我需要稍微概括一下子类中的默认槽值。

示例:

代码语言:javascript
复制
(defclass class-a ()
  ((slot-1 :initarg :slot-1 :initform #'identity)
   <...> other-slots<...>))

它的子类是

代码语言:javascript
复制
(defclass class-b (class-a)
  ((slot-2 :initarg :slot-2 :initform 0)))

但是#'IDENTITY作为默认值还不够好,稍微一般一点。

代码语言:javascript
复制
(lambda (&rest x) x)

会更适合,因为它期望多个论点(我认为它不违背Liskov原则)。为:INITFORM重写CLASS-B的最佳方法是什么?

  1. 我可以为INITIALIZE-INSTANCE :AFTER添加CLASS-B,并查看SLOT-1是否设置为#'IDENTITY并覆盖它。
  2. 如果我在SLOT-1中重新引入CLASS-B,会发生什么情况?我想避免它,因为我将不得不重复所有的插槽信息。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 12:24:51

如果我在B班重新引入第一位会怎么样?

它起作用了。

我想避免它,因为我将不得不重复所有的插槽信息。

不是的。只是区别而已。

票数 7
EN

Stack Overflow用户

发布于 2016-07-28 13:10:47

简单的替代方法是对类使用:default-initargs,而不是对插槽使用:initform。在这种情况下,您只需为子类中的那个时隙提供一个新的默认initarg。有关:default-initargs,请参阅:default-initargs,示例请参阅这个口香糖

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38633305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档