Как создать глобальную переменную в Squeak? - PullRequest
4 голосов
/ 21 мая 2009

Я не имею в виду переменную класса. Я хочу переменную, которая может использоваться везде. Где я должен это определить? [в писк]

Ответы [ 3 ]

6 голосов
/ 21 мая 2009

Squeak хранит все экземпляры класса и другие глобальные переменные в SystemDictionary под названием «Smalltalk». Вы можете определить глобальную переменную следующим образом:

Smalltalk at: #variableName put: theValue.

Обращение к переменной variableName вернет theValue.

Тем не менее, хороший стиль Smalltalk состоит в том, чтобы вообще избегать глобальных переменных.

4 голосов
/ 21 мая 2009

Одним из способов является создание синглтона, как в этом ответе .

Как правило, вы создаете переменную класса и сопровождающий метод класса, чтобы некоторый объект стал глобально доступным. См. Вышеупомянутый синглтон в качестве примера. Такая переменная затем доступна из других источников:

global := MyClass myGlobalVar

Чтобы стать также глобально изменяемым, создайте метод класса мутатора и назовите его следующим образом:

MyClass myGlobalVar: true

Есть и другие способы, но этот с переменными класса переносим на диалекты Smalltalk, поэтому в долгосрочной перспективе это наиболее безопасный способ.

1 голос
/ 21 мая 2009

Ну, класс в smalltalk доступен по всему миру, и вы можете изменить его, когда захотите. Просто создайте класс и добавьте изменяющий код в качестве методов класса. Затем вы можете получить доступ к своим материалам, позвонив по номеру

MyVariable thisOrThat
MyVariable updateThisOrThat: aThisOrThat
...