2011-08-23 14 views
3

TCLでglobalについて質問があります。 1 TCLファイルtclone.tclで 、私はグローバル変数があります。tcltwo.tclと呼ばれる別のTCLのファイルにglobal SIGNALTCLでのグローバルキーワードの使用

を、私のように可変信号を設定します。tclone.tclでset SIGNAL 10

、私はtcltwoをimproted 「package require tcltwo.tcl 次のようにの.tcl tclone.tclにおける可変信号は、私はそれを実行したときに10として設定されるのですか?とgloable変数の使用は何であるのだろうか?

+0

短い答えは「はい」です。 –

答えて

3

its manual pageで述べたように、globalコマンドは内部の意味を持っていますプロボディ:

このコマンドは、プロキシ本体のコンテキストで実行されない限り無効です。

質問全体が不明です。グローバル変数を設定する最初のファイルにprocを、2番目のファイルにprocを(2番目のファイルに)読み込んでおけば、2番目のファイルのコードに変更が反映されます提供される最初のファイルのコードによって、「設定」プロシージャが「取得」前に実行されます。可能性をより明確にするために、グローバル変数はインタプリタに関してグローバルであり、その変数が動作するコードはグローバルである。したがって、どの方法でコードをインタプリタ(package requiresourceevalなど)にフェッチしても、すべてのコードで同じグローバルセットが表示されます。

いずれにしても、グローバル変数の使用を控えるべきでしょう。グローバル変数ですが、後で他のコードを導入するリスクを大幅に軽減します。もちろん、これは通常、アプリケーションの複雑さに依存します。

+0

ちなみに、あなたの変数の名前は、プログラムのさまざまな部分間の何らかの同期のためにそれを使用しようとしている可能性があることを示唆しています。もしそうなら、ホイールを再開発するのではなく、uevent(http://tcllib.sourceforge.net/doc/uevent.html)を見てください。 – kostix

+0

質問:最初のファイルのprocにはグローバルSIGNALがあり、2番目のファイルにはシグナル10がセットされていますが、procでは設定されていませんので、secondeファイルを次のようにパッケージ化しましたtcltwo.tcl will require最初のファイルの変数SIGNALは実行時に10に設定されますか? –

+1

@ratzipの場合、 'set SIGNAL 10'のコンテキストに依存します:このコマンドがトップレベルで呼び出された場合(つまり、' namespace eval foo ... 'などの内部で呼び出されていない場合、答えはyesです。 'set SIGNAL'コマンドの結果は、それが見るコンテキストによって決まります。 'set: :SIGNAL 10'は、それがどんなコンテキストであっても常にグローバル変数 "SIGNAL"を設定します。 – kostix

関連する問題