gpt4 book ai didi

smalltalk - 为什么 Metaclasses 是 Metaclass 而不是 Class 的实例?

转载 作者:行者123 更新时间:2023-12-04 07:28:56 26 4
gpt4 key购买 nike

我想知道为什么使用两个不同的类,而不是只对两者都使用 Class 的原因。

最佳答案

简短的回答是“您认为类是系统范围类的实例是错误的,每个类实际上都是类特定元类的实例”,而且“它不会以任何其他方式工作”。

对答案稍作修改是“名称确实令人困惑,有时只需记住它们的角色而不是过多考虑它们的工作方式会更容易”。

短毛 回复:

元类是一个实例,就像所有其他普通的 Smalltalk 类一样,它需要自己的专用类。常规 Smalltalk 对象的每个实例都有一个类,继承遵循类层次结构。每个类本身都是一个类特定元类的实例,继承遵循元类层次结构。每个元类本身都是 Metaclass 类的一个实例,它被虚拟机用一个巧妙的小技巧短路,因为没有人发现给 Metaclass 类一个父类的用途,所有尝试过的人都发现在这个过程中,他们的理智开始受到侵 eclipse 。

更长,仍然毛茸茸的答案:

Smalltalk 允许每个类包含特定于类的消息。这些大致等同于 Java 中的静态方法 - 但有一些显着差异。这些差异之一是 Smalltalk 类实际上是实例化的对象——它们是系统中的事件对象,具有从其他对象继承的能力,并包含实例变量。

此属性导致系统中潜在的大量继承层次结构。常规对象每个都是一个类的实例,消息发送到一个对象,搜索对象的类,然后跟踪类层次结构的继承链。发送到常规对象的消息在类层次结构中向上解析。

此外,类对象是一个特定于类的元类的每个实例。发送到类对象的消息通过查找类特定的元类来解析,然后在元类层次结构上向上解析。

再上一层,元类对象都是系统范围内唯一的元类类的实例。发送到元类对象的消息在系统范围的唯一元类中查找,该元类不允许从任何人继承,并且在 VM 中作为短路进行硬连接。

从技术上讲,该系统有两个继承层次结构,第三个是通过短路伪造的。尽管有很多实际的原因,但没有理论上的理由停在两点。这允许每个对象拥有它自己的、对象唯一的消息,每个类都有它自己的、唯一的类、消息,并强制所有元类只回答一组消息,在元类中定义。

整洁吧?

关于smalltalk - 为什么 Metaclasses 是 Metaclass 而不是 Class 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com