2009-05-21 25 views

答えて

4

片道は、in this answerのようにシングルトンを作ることです。

一般に、クラス変数とそれに伴うクラスメソッドを使用して、一部のオブジェクトをグローバルにアクセスできるようにします。一例として上記のシングルトンを参照してください。

global := MyClass myGlobalVar 

も世界的に変更になったために、ミューテータークラスのメソッドを作成し、好きなそれを呼び出す:このような変数は、他の場所からのアクセス、その後で

MyClass myGlobalVar: true 

あり、他の方法があまりにもありますが、クラス変数を持つこの1つはありますスモールトークの方言の周りに移植性があり、長期的には最も安全な方法です。

+0

[OK]をクリックしてあなたのものにアクセスできますが、オブジェクトがすべてのアプリケーションに存在するようにしてください。変数をメタクラス 'オブジェクトクラス'のクラス変数として定義することを考えました。そういう意味で、このオブジェクトはちょうど使えるかもしれませんね。どう思いますか? –

+1

私は確かにObjectや他のシステムのような重要なクラスを変更しないでください。この変数を1つ以上のアプリケーションで使用する場合は、この変数を保持するこのクラスで共通のパッケージを作成します。次に、このパッケージを、他のすべてのパッケージの前提条件としてアプリケーションにロードします。これは今日、Smalltalkのグローバルにとって最も適切な方法と考えられています。 –

+0

これは私の答えだと思います。私はいくつかのquestinsを持っています: 1.アクセス方法を定義する場所? 「MyClassクラス」では? 2.変数を初期化するにはどうすればよいですか? –

6

Squeakはすべてのクラスインスタンスとその他のグローバル変数をSystemDictionaryの "Smalltalk"に保存します。あなたは、このようにグローバル変数を定義することができます:変数variableNameに参照のうえ

Smalltalk at: #variableName put: theValue. 

theValueを返します。

しかし、良いSmalltalkスタイルは、グローバル変数を完全に避けることです。

+1

これは一つの可能​​性ですが、非常に危険なので、Smalltalkersは避けています。誤って既存のクラスと同じ変数に名前を付けると、そのクラスが削除されます...だからこそSqueakでさえ、このアプローチはゆっくりと低下しています。他のスモールトークはそれを持っていないか、それを持っていません。 –

+1

Smalltalkerはグローバル変数を完全に避けることを好みます。 – Nat

1

Smalltalkのクラスは世界的に利用可能で、好きなときにいつでも変更できます。クラスを作成し、クラスメソッドとして変更コードを追加するだけです。

MyVariable thisOrThat 
MyVariable updateThisOrThat: aThisOrThat 
関連する問題