我对struct的理解是,它具有用于存储数据的插槽,具有类型,具有make-X
和slot-accessor函数,并且可以通过方法进行专门化(因为它具有类型)。
我对类的理解是,它具有所有相同且多个继承。 this question的最高答案指出,结构可以具有单一继承,并且CLOS的初始实现比结构“慢得多”。
根据人们谈论CLOS和结构的方式,我认为肯定还有其他差异,但是我对Google的琐碎搜索却毫无结果。所以我问:CLOS和结构之间的实际区别是什么?
最佳答案
结构
Structures更原始。它们提供了通常被称为编程语言的记录。它们是在上课之前发明的。 1984年,CLtL1(第一本描述Common Lisp的书)已经具有结构,后来又添加了一个称为CLOS的标准对象系统。结构提供
DEFSTRUCT
有用的补充:
局限性:
更改结构类型后的
扩展名
CLOS类
CLOS是在80年代中期/晚期基于两个较早的对象系统(Flavors和LOOPS)发明的。它提供:
DEFCLASS
局限性:
DEFCLASS
定义不是很简洁扩展名
常见Lisp
在某些情况下,Common Lisp标准没有说明应如何实现功能:结构,类,甚至其他内容。示例是流和条件。如果Common Lisp实现对这些使用CLOS,通常是一个好兆头(增加灵活性)。
关于class - Common Lisp中的struct和class之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34244855/