2012-02-23 10 views
1

私はおそらく私はちょうど理解していないTclの好奇心のケースがあります。 次のコードは(ない任意の手順の内側)トップレベルで行われている:それはまだ宣言されていない場合、私はそれを行うだろう願って何Tclの情報があります

if {![info exists g_log_file_name]} { 
    set g_log_file_name "default.txt" 
} 

は、いくつかの値を持つグローバル変数を宣言することです(これはできます他のスクリプトやCアプリケーションでも実行できます)。ただし、if文は常に falseです。私はTcl 7.4で走った。

何か問題がありますか?

ありがとうございました。

答えて

6
% info level 
0 
% info exists g_log_file_name 
0 
% set g_log_file_name whatever 
whatever 
% info exists g_log_file_name 
1 

変数があなたのifコマンドが実行された時点で常に解除本当にあるので、したがって、あなたが観察した理由は、おそらくです。私は想像することができる。このため

考えられる理由は以下のとおりです。

  • それが設定されていないだけではありません:文字通り、これを行うには、コードの試みを、
  • 外部コードは、他の変数を設定します。名前の不一致。
  • 外部コードは、他のインタプリタで変数を設定します.Tclを埋め込んだCコードでは、任意の数のTclインタプリタがいつでもアクティブになることができます(子インタプリタも自由に作成できます)。

私はあなたが手に持っているのTclの長い忘れバージョンABOTわからないんだけど、あなたがそれを使用しようとすることができ— 8.xでは、ログインするために使用することができますtraceコマンドは、特定の変数にアクセスしています何が起こるか見る。

+1

旧式の構文ですが、7.4で可変トレースがありました(これはTkにとって重要な機械です)。 (コマンドと実行のトレースは、後で追加されます)。 –

関連する問題