2009-05-21 2 views

ответ

4

Один из способов - сделать одноэлементный, как in this answer.

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

global := MyClass myGlobalVar 

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

MyClass myGlobalVar: true 

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

+0

ОК, но я хочу, чтобы объект существовал в каждом приложении. Я думал об определении переменной как переменной класса метакласса «Класс объекта». Таким образом, этот объект можно было бы использовать, верно? Как вы думаете? – 2009-05-21 12:04:48

+1

Я бы точно не изменил такие важные классы, как Object и другие системные. Если вы используете эту переменную больше в одном приложении, создайте общий пакет с этим классом, который будет содержать эту переменную. Затем загрузите этот пакет как необходимое условие для всех других пакетов с вашими приложениями. В настоящее время это считается наиболее подходящим способом для глобалов в Smalltalk. –

+0

Я думаю, что это мой ответ. У меня есть несколько заданий: 1. Где определить метод доступа? В классе «MyClass»? 2. Как инициализировать переменную? – 2009-05-21 12:26:03

6

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

Smalltalk at: #variableName put: theValue. 

Отсносящийся переменной variableName вернется theValue.

Однако хороший стиль Smalltalk заключается в том, чтобы избежать глобальных переменных вообще.

+1

Это одна из возможностей, но Smalltalkers избегают этого, потому что это очень опасно. Если вы по ошибке назовите переменную так же, как какой-то существующий класс, вы удалите этот класс ... Вот почему даже в Squeak этот подход медленно обесценивается. Другие Smalltalks не имеют его или имеют его по-разному. –

+1

Smalltalkers предпочитают вообще избегать глобальных переменных. – Nat

1

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

MyVariable thisOrThat 
MyVariable updateThisOrThat: aThisOrThat 
Смежные вопросы