Common Lisp中的标准对象和标准类的层次结构

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-classstandard-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类的超类.

  • 从p开始 元对象协议的艺术附录D中的306示出了用于引导类似CLOS的语言的代码; 包括所有圆形度是如何解开的; 我发现它提供了丰富的信息,虽然我还不能说我完全理解它. (2认同)