当 TCL 中的变量发生变化时执行某些操作

Dco*_*ode 2 tcl

在 TCL 中,我们是否有任何机制可以不断轮询变量更改并在之后执行某些操作。

我已经读过vwait,但它正在暂停脚本。我希望脚本能够运行,并且在变量值发生变化时执行某些操作。

vwait 的一种异步模式。

Don*_*ows 5

您可以将跟踪附加到变量,以便每当变量发生更改(或者根据标志,读取或删除)时,您可以立即执行某些操作。试试这个例子:

\n\n
set abc 123\nproc exampleCallback args {\n    global abc\n    puts "The variable abc is now $abc"\n}\ntrace add variable abc write exampleCallback\nincr abc\nincr abc\nincr abc\n
Run Code Online (Sandbox Code Playgroud)\n\n

可以跟踪局部变量,但不推荐。此外,在内部,该vwait命令设置一个跟踪,在写入变量时仅触发一个标志;当事件循环返回时,该标志表示等待结束。碰巧该跟踪是使用 Tcl 的 C API 设置的,而不是其脚本级 API\xe2\x80\xa6

\n