pharo 中 "instance Variable Names" 和 "class Variable Names" 有什么区别?

What is the difference between "instance Variable Names" and "class Variable Names", in pharo?

我刚刚使用系统浏览器在 pharo 中创建了自己的包 (MyPackage) 和 class(MyClass)。 这是它的样子。

Object subclass: #MyClass
    instanceVariableNames: ''
    classVariableNames: ''
    category: 'MyPackage'

我理解术语 subclass 和类别,但不明白其他两个术语(instanceVariableNames、classVariableNames)的含义。

我的印象是这个问题已经被提出并得到了回答,但我找不到它,可能它在邮件列表中。

实例变量 只是实例的个人变量,因此您定义的 class 的每个实例都将拥有自己的一组变量。

class端的实例变量。你可以定义当你切换到class这边时,你会看到这样的代码:

MyClass class
  instanceVariableNames: ''

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

Class变量是实例端模板上classVariableNames: ''定义的变量。我喜欢称它们为 "pool variables",但事实上,如果您定义了这样的变量,层次结构中的所有实例都将能够访问它。假设您有一个 class A 并且它是 subclass B。如果 A 中有 "class variable",则可以从 AB 的两个实例访问同一个变量。这就像有一个层次结构的全局变量。我建议不要使用这种类型的变量。