pharo中"实例变量名称"和"类变量名称"之间有什么区别?

sid*_*21g 1 smalltalk pharo

我刚刚使用系统浏览器在pharo中创建了自己的包(MyPackage)和类(MyClass).这是它的外观.

Object subclass: #MyClass
    instanceVariableNames: ''
    classVariableNames: ''
    category: 'MyPackage'
Run Code Online (Sandbox Code Playgroud)

我理解术语子类和类别,而不是获得其他两个术语(instanceVariableNames,classVariableNames)的含义.

Uko*_*Uko 6

我的印象是这个问题已经被问到并得到了解答,但是我找不到它,可能是在邮件列表上.

实例变量只是实例个体的变量,因此您定义的类的每个实例都将拥有自己的变量集.

类侧的实例变量.您可以定义当切换到类侧时,您将获得如下代码:

MyClass class
  instanceVariableNames: ''
Run Code Online (Sandbox Code Playgroud)

在Pharo(和一般的Smalltalks)中,每个类都是元类的一个实例.变量可以通过类方法访问,并且由于只有一个实例表示类对象,因此该实例只有一组这些变量.

类变量classVariableNames: ''实例端模板定义的变量.我喜欢称它们为"池变量",但实际上如果定义了这样的变量,层次结构中的所有实例都可以访问它.假设你有一个类A,它是子类B.如果你有一个"类变量" A,你可以从两个实例访问相同的变量AB.这就像拥有层次结构的全局变量一样.我建议不要使用这种类型的变量.