新的tcl,并试图理解“跟踪添加变量”命令。
我理解当一个变量被“写”到时调用回调函数的必要性。
但是,“读”选项有什么用呢?为了调试?
发布于 2017-10-13 22:04:18
例如,可以使用全局计数器:
proc init { } {
set ::globalcounter 0
trace add variable ::globalcounter read ::gcountUpdate
}
proc gcountUpdate { } {
incr ::globalcounter
}
proc main { } {
init
puts $::globalcounter
puts $::globalcounter
}
main我肯定还有其他用途。正如你所指出的调试。
它可用于通过特定程序强制执行可变存取。
发布于 2017-10-14 08:43:22
read回调(实际上比写回调更不常见)的一个用途是将Tcl变量链接到C变量;read回调用于强制读取C变量并将Tcl变量同步到C变量。(写回调将确保Tcl变量的更新反映到C变量中。)Tcl拥有使用这种机制的内置的C API,尽管它使用底层的C作为变量跟踪,而不是构建在其之上的Tcl。
您还可以使用read回调来创建一个明显的只读变量:
trace add variable foo read {apply {args {
upvar "#0" foo v
set v "definitely this"
}}}
puts $foo
set foo "that"
puts $foo我不建议在局部变量上使用变量跟踪。与全局/命名空间变量相比,它们具有更多的开销(和内部复杂性)。
https://stackoverflow.com/questions/46738112
复制相似问题