2012-02-23 51 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