2012-02-23 67 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解釋器在任何時刻處於活動狀態(並且這些解釋器也可以自由創建子解釋器)。

我不知道ABOT的Tcl的早已被人遺忘的版本,你必須在手,但8.x中有trace命令可用於登錄訪問特定變量—你可以嘗試用它來走着瞧吧。

+1

雖然它是舊式的語法,但在7.4中有變量跟蹤(它是Tk的關鍵機制)。 (命令和執行追蹤稍後會增加。) – 2012-02-23 14:50:08