classVariableNames和#x27';和实例变量名称:'';在Pharo Smalltalk中设置单身汉时?

classVariableNames和#x27';和实例变量名称:'';在Pharo Smalltalk中设置单身汉时?,smalltalk,pharo,Smalltalk,Pharo,一个位于实例侧: Object subclass: #MyClass instanceVariableNames: '' classVariableNames: '' category: 'MyApp' 另一个可在类侧访问: MyClass class instanceVariableNames: '' 我到处都能找到一些信息 在这里找到了一个很好的解释,粘贴了几行以供参考。人们应该阅读整个专栏。 使用类变量的类可以通过几个 编码约定。这些编码约定使创建更容

一个位于实例侧:

Object subclass: #MyClass
    instanceVariableNames: ''
    classVariableNames: ''
    category: 'MyApp'
另一个可在类侧访问:

MyClass class
    instanceVariableNames: ''

我到处都能找到一些信息

在这里找到了一个很好的解释,粘贴了几行以供参考。人们应该阅读整个专栏。

使用类变量的类可以通过几个 编码约定。这些编码约定使创建更容易 子类。有时开发人员不恰当地使用类变量。 不恰当地使用类变量会导致类 很难分类。通常,对于 特别的问题是类实例变量而不是类 变数

什么是类变量?班级可以有

•等级 变量,以及

•类实例变量

类变量是 通过引用的名称从实例和类方法引用 类变量。任何方法,无论是类方法还是实例 方法可以引用类变量


当您创建一个新类(例如笔)时,您将创建一个元类实例的类(这将是笔类),并且您将能够获得笔类实例的笔实例

你可以有很多笔,但你只有一个笔类

实例变量是一个实例的变量。每个实例都有自己的变量。每支笔都可以有自己的颜色

类变量是类对象(笔类)的变量。由于Pen类只有一个实例,所以此变量只有一个值。如果您的笔有一个类变量#DefaultColor,
myPenInstance类DefaultColor
将为所有笔实例返回相同的值

最后,类端的实例变量用作实例端的实例变量,但不适用于类

类端的类变量和实例变量之间的区别在于,类变量对于类及其子类是唯一的,而类端的实例变量对于每个子类都是特定的

如果您有一个UniqueInstance类变量,该变量在笔中存储一个带有访问器的单例,
Pen UniqueInstance
PenSubclass UniqueInstance
将返回唯一的笔实例


如果对类端的实例变量执行相同的操作,
Pen uniqueInstance
将返回Pen uniqueInstance,而
PenSubclass uniqueInstance
将返回PenSubclass uniqueInstance。

可能重复我正在寻找关于旧语法如何对应于新语法的解释。你能看看我下面的答案吗?池字典和类实例变量是不同的概念。PoolDictionary是一个全局字典,其关联
name->value
bind
name
value
在使用池的任何类的范围内。类实例变量只是元类级别的实例变量。单例类的正确用法是什么:类变量(我见过用于此目的的)还是类端实例变量?我尽量少用单例,我没有看到需要单例类层次结构的情况。所以我在类变量中使用它。