对象如何成为 class lisp
How can an object be a class lisp
我试图为它想一个更好的名字,但我想不出。
此外,关于此的每个主题都涉及 python 而我不知道 python
我知道最蠢的:meta-class
是standar-class
standard-object
是 standard-class
的一个实例,每个 class 都是 standard-class
的一个实例,并继承了 standard-object
的所有内容但这怎么可能呢?
至于 standard-object
如何同时成为一个对象和一个 superclass ?
它是如何工作的,为什么?
我不明白的是,一个实例化的 class 怎么可能也是一个 class?
一种思考方式是忘记引导是一个问题,想象对象系统“就是这样”,然后看起来很自然:
- 万物皆对象
- 每个对象都是 class
的实例
- 每个(标准)class 是
standard-object
的子class
- 一个class是一个对象
- 每个标准 class 都是一个对象,它是
standard-class
的一个实例
standard-class
是一个标准 class,它是一个对象,它是 standard-class
的一个实例,standard-object
的子class 是一个 class 这是一个对象,它是 standard-class
的一个实例
我试过但没有找到合适的图表。
另一种思考方式是引导。怎么才能达到上面的状态呢?
一种方法是,您可以创建一个不存在其 class 的对象:
- 决定对象的内存布局
- 知道如何在内存中布置
standard-class
的实例,分配一个将成为 class standard-class
的实例
- 用正确的东西初始化那个实例。将它的 class 设置为它自己。暂时不要设置任何 superclasses
- 执行相同的操作以分配一个实例,该实例将变为
standard-object
(以及层次结构的其他部分,即 class
、[=20= 的 class、generic-function
, method
, 等)
- 所有这些对象的class都可以设置为
standard-class
- 连接 class 层级关系
- 创建用于分配实例和编译泛型函数等的泛型函数和方法
- 欢迎使用您的新对象系统
您可以反过来问自己这个问题:为什么 class 在面向对象的编程语言中不是对象?
什么是class?它包含有关如何创建新对象的信息,例如字段、默认值等……在 OOP 中,将数据存储在一起的默认工具是对象。所以 CL 的 classes 只是对象!并且因为classes本身就是对象,当然他们有一个class,STANDARD-CLASS
(STANDARD-OBJECT
是一个class的直接superclass没有任何其他超级classes…cf.Inheritance structure of metaobject classes).
作为练习,您可以尝试创建自己的(非常简单的)对象系统,您可能会很快发现让 classes 成为对象会让您的生活变得更轻松。从那里开始,只有引导的小问题。 :-)
我试图为它想一个更好的名字,但我想不出。 此外,关于此的每个主题都涉及 python 而我不知道 python
我知道最蠢的:meta-class
是standar-class
standard-object
是 standard-class
的一个实例,每个 class 都是 standard-class
的一个实例,并继承了 standard-object
的所有内容但这怎么可能呢?
至于 standard-object
如何同时成为一个对象和一个 superclass ?
它是如何工作的,为什么?
我不明白的是,一个实例化的 class 怎么可能也是一个 class?
一种思考方式是忘记引导是一个问题,想象对象系统“就是这样”,然后看起来很自然:
- 万物皆对象
- 每个对象都是 class 的实例
- 每个(标准)class 是
standard-object
的子class
- 一个class是一个对象
- 每个标准 class 都是一个对象,它是
standard-class
的一个实例
standard-class
是一个标准 class,它是一个对象,它是standard-class
的一个实例,standard-object
的子class 是一个 class 这是一个对象,它是standard-class
的一个实例
我试过但没有找到合适的图表。
另一种思考方式是引导。怎么才能达到上面的状态呢?
一种方法是,您可以创建一个不存在其 class 的对象:
- 决定对象的内存布局
- 知道如何在内存中布置
standard-class
的实例,分配一个将成为 classstandard-class
的实例
- 用正确的东西初始化那个实例。将它的 class 设置为它自己。暂时不要设置任何 superclasses
- 执行相同的操作以分配一个实例,该实例将变为
standard-object
(以及层次结构的其他部分,即class
、[=20= 的 class、generic-function
,method
, 等) - 所有这些对象的class都可以设置为
standard-class
- 连接 class 层级关系
- 创建用于分配实例和编译泛型函数等的泛型函数和方法
- 欢迎使用您的新对象系统
您可以反过来问自己这个问题:为什么 class 在面向对象的编程语言中不是对象?
什么是class?它包含有关如何创建新对象的信息,例如字段、默认值等……在 OOP 中,将数据存储在一起的默认工具是对象。所以 CL 的 classes 只是对象!并且因为classes本身就是对象,当然他们有一个class,STANDARD-CLASS
(STANDARD-OBJECT
是一个class的直接superclass没有任何其他超级classes…cf.Inheritance structure of metaobject classes).
作为练习,您可以尝试创建自己的(非常简单的)对象系统,您可能会很快发现让 classes 成为对象会让您的生活变得更轻松。从那里开始,只有引导的小问题。 :-)