The*_*Ent 10 lisp common-lisp clos
我正在学习Common Lisp(使用Lispworks),而我正试图进入类系统.有一个名为standard-object的类,它被定义为
类标准对象是标准类的实例,是每个类的超类,它是标准类的实例,除了它自己.
(取自http://www.lispworks.com/documentation/HyperSpec/Body/t_std_ob.htm#standard-object)所以它是标准类的一个实例
另一方面,standard-class是standard-object的子类
>(subtypep 'standard-class 'standard-object)
=>T, T
Run Code Online (Sandbox Code Playgroud)
标准对象如何成为标准类的超类并同时成为它的实例?如果我们将标准类定义为子类型,我们应该在对其超类型(例如标准对象)进行定义后对其进行定义,那么如何将超类变为实例呢?或者我的逻辑是错的?
Rai*_*wig 13

CLOS是一个对象系统,其中CLOS概念本身就是一流的对象.类本身是元类的实例.涉及一些循环.
有一个例子standard-object.这是一个例子standard-class.这本身就是一个阶级.所有标准CLOS对象都将它作为超类.还有其他类型的对象,例如结构.因此,standard-object有作为所有典型的CLOS对象的超类.
standard-class就是它本身.它是所有类对象的类.由于standard-object也是一个类,因此该类的实例是该类standard-object的实例standard-class.由于所有标准类都是CLOS对象,因此standard-class继承自standard-object.
CL-USER 22 > (class-of (find-class 'standard-object))
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
Run Code Online (Sandbox Code Playgroud)
standard-object类对象的类是standard-class.
CL-USER 23 > (class-of (find-class 'standard-class))
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
Run Code Online (Sandbox Code Playgroud)
standard-class类对象的类是standard-class.
CL-USER 24 > (find-class 'standard-object)
#<STANDARD-CLASS STANDARD-OBJECT 40F017732B>
Run Code Online (Sandbox Code Playgroud)
该类standard-object本身就是一个对象和一个类.它是所有CLOS对象的超类.
CL-USER 25 > (find-class 'standard-class)
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
Run Code Online (Sandbox Code Playgroud)
该类standard-class本身就是一个对象和一个类.它是所有CLOS类的超类.