Tcl信息存在

ily*_*725 1 tcl

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

if {![info exists g_log_file_name]} {
    set g_log_file_name "default.txt"
}
Run Code Online (Sandbox Code Playgroud)

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

可能是什么问题?

非常感谢.

kos*_*tix 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
Run Code Online (Sandbox Code Playgroud)

因此,您观察到的原因可能是因为在执行命令时变量实际上始终未设置if.

我可以想象的可能原因是:

  • 它只是没有设置:从字面上看,没有代码试图这样做;
  • 外部代码设置了一些其他变量:名称不匹配;
  • 外部代码在其他一些解释器中设置一个变量:在嵌入Tcl的C代码中,任何时候都可以有任意数量的Tcl解释器(并且可以自由创建子解释器);

我不确定你手头有长久遗忘的Tcl版本,但是8.x有一个trace命令可以用来记录对特定变量的访问 - 你可以试着用它来看看会发生什么.