Smalltalk 引用尚未定义的 类

Smalltalk referring to classes that are not yet defined

我希望能够编写这样的代码:

MyObject subclass: #A instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1'.
A subclass: #B instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1'.

没有 运行 每行分开。

当我尝试执行此操作时,出现错误提示 A 未声明,即使它会在到达第二行时声明。

有没有办法克服这个问题?

对于 classes 的延迟查找,您必须在名为 Smalltalk 的全局字典中查找 class(尝试检查和浏览它)。您可以使用 classNamed:at: 之类的访问器来查找在编译要评估的整个表达式时可能尚未定义的名称。

MyObject subclass: #A instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1'.
(Smalltalk classNamed: #A) subclass: #B instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1'.

某些方言支持 Symbol 上的 asClass 消息,让您可以:

MyObject subclass: #A instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1'.
#A asClasss subclass: #B instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'CAT1