Smalltalk 如何在Squeak中创建全局变量?

Smalltalk 如何在Squeak中创建全局变量?,smalltalk,squeak,global-variables,Smalltalk,Squeak,Global Variables,我不是指类变量。我想要一个可以在任何地方使用的变量。 我应该在哪里定义它?[在吱吱声中]一种方法是制作一个单件,如图所示 通常,您会创建一个类变量和相应的类方法,以使某个对象成为全局可访问的对象。以上面提到的singleton为例。然后从其他地方访问该变量: global := MyClass myGlobalVar 要成为全局可更改的,请创建mutator类方法并调用它,如下所示: MyClass myGlobalVar: true 也有其他方法,但这种带有类变量的方法可以移植到Small

我不是指类变量。我想要一个可以在任何地方使用的变量。
我应该在哪里定义它?[在吱吱声中]

一种方法是制作一个单件,如图所示

通常,您会创建一个类变量和相应的类方法,以使某个对象成为全局可访问的对象。以上面提到的singleton为例。然后从其他地方访问该变量:

global := MyClass myGlobalVar
要成为全局可更改的,请创建mutator类方法并调用它,如下所示:

MyClass myGlobalVar: true

也有其他方法,但这种带有类变量的方法可以移植到Smalltalk方言中,因此长期来看,它是最安全的方法。

Squeak将所有类实例和其他全局变量存储在名为“Smalltalk”的系统字典中。您可以这样定义全局变量:

Smalltalk at: #variableName put: theValue.
引用变量
variableName
将返回


然而,好的Smalltalk风格是完全避免全局变量。

Smalltalk中的类是全局可用的,您可以随时更改它。只需创建一个类并将代码添加为类方法。然后,您可以通过拨打电话访问您的资料

MyVariable thisOrThat
MyVariable updateThisOrThat: aThisOrThat

好的,但我希望对象存在于每个应用程序中。我考虑将变量定义为元类“Object class”的类变量。这样这个东西就可以用了,对吧?你觉得呢?我当然不会为了这个而改变像Object和其他系统类这样的重要类。如果要在多个应用程序中使用此变量,请使用此类创建一个公共包,该类将保存此变量。然后将此包作为应用程序中所有其他包的先决条件加载。如今,这被认为是全球人在闲聊中最合适的方式。我想这就是我的答案。我有几个问题:1。在哪里定义访问方法?在“我的课堂”里?2.如何初始化变量?请参见上面提到的单例示例。这可以扩展到任何这样的类变量。这是一种可能性,但小人都在避免它,因为它非常危险。如果您错误地将变量命名为与某个现有类相同的名称,您将删除该类。。。这就是为什么即使在Squeak,这种方法也在慢慢贬值。其他的Smalltalk没有或有不同的功能。Smalltalk者更喜欢完全避免全局变量。