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