Tcl信息存在

时间:2012-02-23 03:56:08

标签: tcl

我有一个奇怪的Tcl案例,也许我只是不明白。 以下代码在顶层(不在任何过程内)完成:

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

我希望它能做的是声明一个具有某些值的全局变量(如果它尚未声明)(可以在其他脚本或C应用程序中完成)。但是,if语句总是为false。我跑了Tcl 7.4。

可能是什么问题?

非常感谢你。

1 个答案:

答案 0 :(得分: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版本,但是8.x有trace命令可以用来记录对特定变量的访问 - 你可以尝试使用它看看会发生什么。