我对结构的理解是它有存储数据的槽,有一个类型,有make-X
和槽访问器函数,并且可以通过一个方法专门化(因为它有一个类型)。
我对一个类的理解是它具有所有相同和多重继承。这个问题的最佳答案表明结构可以具有单一继承,并且 CLOS 的初始实现比结构“慢得多”。
根据人们如何谈论 CLOS 和结构,我认为肯定还有其他一些差异,但是我的琐碎谷歌搜索没有结果。所以我问:CLOS和结构之间有什么实际区别?
我对结构的理解是它有存储数据的槽,有一个类型,有make-X
和槽访问器函数,并且可以通过一个方法专门化(因为它有一个类型)。
我对一个类的理解是它具有所有相同和多重继承。这个问题的最佳答案表明结构可以具有单一继承,并且 CLOS 的初始实现比结构“慢得多”。
根据人们如何谈论 CLOS 和结构,我认为肯定还有其他一些差异,但是我的琐碎谷歌搜索没有结果。所以我问:CLOS和结构之间有什么实际区别?
结构
结构更原始。它们提供了在编程语言中通常被称为记录的东西。它们是在上课前发明的。1984 年的 CLtL1(第一本描述 Common Lisp 的书)已经有了结构,后来又添加了一个称为 CLOS 的标准对象系统。结构提供
DEFSTRUCT
有用的补充:
限制:
扩展
CLOS 课程
CLOS是在 80 年代中后期基于两个较早的对象系统(Flavors 和 LOOPS)发明的。它提供:
DEFCLASS
限制:
DEFCLASS
定义不是很简洁扩展
通用 Lisp
在某些情况下,Common Lisp 标准并没有说明应该如何实现功能:结构、类,甚至可能是其他东西。示例是流和条件。如果 Common Lisp 实现使用 CLOS,这通常是一个好兆头(增加灵活性)。
defstruct
在幕后为您做更多的工作,例如:
print-object
方法此外,结构槽访问速度更快(尽管差异可能无关紧要)。
底线是,除非您需要 MOPish 功能,否则您可以使用defsrtuct
.