Smalltalk “与”的区别是什么;实例变量名“;及;“类变量名”;,在法罗?

Smalltalk “与”的区别是什么;实例变量名“;及;“类变量名”;,在法罗?,smalltalk,pharo,Smalltalk,Pharo,我刚刚使用系统浏览器在pharo中创建了我自己的包(MyPackage)和类(MyClass)。 这就是它的样子 Object subclass: #MyClass instanceVariableNames: '' classVariableNames: '' category: 'MyPackage' 我理解“子类”和“类别”这两个术语,但没有理解其他两个术语(instanceVariableNames,classVariableNames)的含义。我觉得这个问题已

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

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

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

我觉得这个问题已经被问到并回答了,但我找不到它,可能是在邮件列表上

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

类端的实例变量。您可以定义,当切换到类端时,您将使用如下代码:

MyClass class
  instanceVariableNames: ''
在Pharo(以及一般的Smalltalks)中,每个类都是一个元类的实例。这些变量可以通过类端方法访问,因为只有一个实例表示类对象,所以该实例中只有一组变量


类变量是由实例端模板上的
classVariableNames:“
定义的变量。我喜欢称它们为“poolvariables”,但事实上,如果您定义这样的变量,那么层次结构中的所有实例都将能够访问它。假设您有一个类
a
,它是子类
B
。如果在
a
中有一个“类变量”,则可以从
a
B
的两个实例中访问相同的变量。这就像有一个层次结构的全局变量。我建议不要使用这种类型的变量。

您熟悉其他OO语言的编程吗?实例变量、类变量和类实例变量在面向对象编程中都是范围不同的变量,而不仅仅是Smalltalk独有的变量。如果你用谷歌搜索这些术语,你会发现各种各样的描述解释了它们之间的区别。@lower它很特别。如果你搜索一个“类变量”,你会得到一个类实例变量的解释。同时,在实例端使用类变量和在类端使用实例变量确实令人困惑。我认为在某种程度上,有这样的解释是很重要的SO@Uko是的,当然搜索“类变量”也会带来“类实例变量”,因此在阅读有关该主题的文章时,确实需要仔细阅读术语(即,他们使用的短语是“类变量”还是“类实例变量”)。我同意类实例变量需要更好的解释,并且适合SO主题。我同意@Louger的观点——实例变量和类变量之间的区别是基本的OO,并且有一个答案,例如,或者OP可以展示一些研究成果,至少阅读“类变量”和“实例变量”维基百科中的条目。