【发布时间】:2009-05-21 11:38:39
【问题描述】:
我不是指类变量。我想要一个可以在任何地方使用的变量。 我应该在哪里定义它? [吱吱声]
【问题讨论】:
标签: smalltalk squeak global-variables
我不是指类变量。我想要一个可以在任何地方使用的变量。 我应该在哪里定义它? [吱吱声]
【问题讨论】:
标签: smalltalk squeak global-variables
Squeak 将所有类实例和其他全局变量存储在名为“Smalltalk”的 SystemDictionary 中。你可以像这样定义一个全局变量:
Smalltalk at: #variableName put: theValue.
引用变量variableName 将返回theValue。
然而,好的 Smalltalk 风格是完全避免全局变量。
【讨论】:
一种方法是创建一个单例,如in this answer。
一般来说,你会创建一个类变量和伴随的类方法来让某个对象成为全局可访问的。以上面提到的单例为例。然后从其他地方访问这样的变量:
global := MyClass myGlobalVar
要成为全局可更改的,请创建 mutator 类方法并将其称为:
MyClass myGlobalVar: true
还有其他方法,但是这个带有类变量的方法可以在 Smalltalk 方言中移植,因此从长远来看它是最安全的方法。
【讨论】:
smalltalk 中的一个类是全球可用的,您可以随时更改它。只需创建一个类并将您的更改代码添加为类方法。然后,您可以通过调用访问您的资料
MyVariable thisOrThat
MyVariable updateThisOrThat: aThisOrThat
【讨论】: