Tcl 信息存在

发布于 2025-01-07 21:24:53 字数 287 浏览 1 评论 0原文

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

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

我希望它做的是声明一个具有某个值的全局变量(如果尚未声明)(这可以在其他脚本或 C 中完成)应用)。然而,if 语句总是为假。我在 Tcl 7.4 上运行。

可能是什么问题?

太感谢了。

I have a curious case of Tcl that perhaps I just don't understand.
The following code is done at the top level (not inside of any procedure):

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

What I hope it would do is to declare a global variable with some value if it wasn't declared yet (which can be done at some other script or C application). However, the if statement always false. I ran on Tcl 7.4.

What may be the problem?

Thank you so much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过潦 2025-01-14 21:24:53
% 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 命令可用于记录对特定变量的访问 - 您可以尝试使用它来查看会发生什么。

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

Hence the reason you observe is probably because the variable is really always unset at the time your if command is executed.

Possible reasons for this I can imagine are:

  • It's just not set: literally, no code attempt to do this;
  • The external code sets some other variable: name mismatch;
  • The external code sets a variable in some other interpreter: in a C code embedding Tcl, there can be any number of Tcl interpreters active at any moment (and those are free to create child interpreters as well);

I'm not sure abot the long forgotten version of Tcl you have at hand, but 8.x has the trace command which can be used to log accesses to a particular variable—you could try to use it to see what happens.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文