"实例变量名称和#34;之间有什么区别?和#34;类变量名称",在pharo?

时间:2015-08-29 12:27:15

标签: smalltalk pharo

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

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

我理解术语子类和类别,没有得到其他两个术语的含义(instanceVariableNames,classVariableNames)。

1 个答案:

答案 0 :(得分:6)

我的印象是这个问题已经被问及并得到了解答,但我无法找到它,可能是在邮件列表中。

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

班级的实例变量。你可以定义当你切换到班级时,你会得到这样的代码:

MyClass class
  instanceVariableNames: ''

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

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